728x90
[a,b,c]
[d,e,f]
[g,h,i]
이렇게 있으면 abcfihgde 이런식으로 출력해야함
const spiralTraversal = function (matrix) {
row = matrix.length;
col = matrix[0].length;
let vis = Array.from(Array(row), () => Array(col).fill(0)) //방문했는지 알려주는 2차원배열
let res = []; //결과
let swit = 0; //방향을 나타내주는 변수
let x = 0; //순회할때 어느 위치부터 순회할지
let y = 0; //순회할때 어느 위치부터 순회할지
let temp_x = 0;
let temp_y = 0;
for(let i=0;i<row+col;i++) { //row+col번 이상 순회하지 않기때문
swit = swit%4; //방향이 상하좌우 4방향밖에 없기 때문
if(swit===0) { //오른쪽 순회
for(let j=y;j<col;j++) {
if(vis[x][j]===0) { //방문안했으면
res.push(matrix[x][j]); //결과 배열에 넣고
vis[x][j]=1; //방문했다고 해주고
temp_y = j; //예비y 변수에 넣어줬다가
}
}
y = temp_y; //y변수에 예비y 변수를 넣어줌
}
else if(swit===1) { //아래쪽
for(let j=x;j<row;j++) {
if(vis[j][y]===0) {
res.push(matrix[j][y]);
vis[j][y]=1;
temp_x=j;
}
}
x = temp_x;
}
else if(swit===2) { //왼쪽
for(let j=y;j>=0;j--) {
if(vis[x][j]===0) {
res.push(matrix[x][j]);
vis[x][j]=1;
temp_y=j;
}
}
y = temp_y;
}
else if(swit===3) { //위쪽
for(let j=x;j>=0;j--) {
if(vis[j][y]===0) {
res.push(matrix[j][y]);
vis[j][y]=1;
temp_x=j;
}
}
x = temp_x;
}
swit++; //방향을 바꿔줌
}
res = res.join(''); //결과를 문자열로 만들고
return res; //리턴
};반응형
'BEB > algorithm' 카테고리의 다른 글
| 25_robotPath (0) | 2022.11.29 |
|---|---|
| [Javascript] 기수정렬 (0) | 2022.11.28 |
| [JavaScript] 배열 회전 (90도,180도,270도) (0) | 2022.11.24 |
| 머지소트 병합정렬 (1) | 2022.11.22 |
| LPS (0) | 2022.11.21 |
댓글