250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(Leet Code JS)Spiral Matrix 본문
728x90
반응형
https://leetcode.com/problems/spiral-matrix/
주어진 배열을 Spiral로 순회하면서 수를 저장하는 문제.
m과 n을 각각 matrix의 가로, 세로 길이로 저장.
direct는 spiral로 순회하기 위한 방향 배열.
visited는 방문 여부 확인 배열.
x와 y는 현재 좌표를 뜻하며, d는 direct의 인덱스를 나타낸다.
rangeCheck() 함수로 좌표가 배열의 범위를 벗어나는지 확인한다.
while문으로 answer의 length가 m * n일 때까지 반복한다.
현재 좌표를 방문 처리한 후, answer에 수를 저장한다.
만약 다음 좌표(x + direct[d][0], y + direct[d][1])가 배열의 범위를 벗어나거나, 이미 방문한 좌표라면 d를 이용해 방향을 바꿔주도록 한다.
이후 무조건 x와 y 좌표를 다음 좌표로 바꿔준 후 계속 진행하면 된다.
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
const m = matrix.length;
const n = matrix[0].length;
const direct = [[0, 1], [1, 0], [0, -1], [-1, 0]];
const visited = Array.from({length: m}, () => Array(n).fill(false));
const answer = [];
let x = 0;
let y = 0;
let d = 0;
const rangeCheck = (x, y) => x >= 0 && x < m && y >= 0 && y < n;
while(answer.length !== m * n){
visited[x][y] = true;
answer.push(matrix[x][y]);
if(!rangeCheck(x + direct[d][0], y + direct[d][1]) || visited[x + direct[d][0]][y + direct[d][1]]){
d = (d + 1) % 4;
}
x += direct[d][0];
y += direct[d][1];
}
return answer;
};
728x90
반응형
'Leet Code 알고리즘' 카테고리의 다른 글
(Leet Code JS)Cheapest Flights Within K stops (0) | 2022.03.28 |
---|---|
(Leet Code JS)Letter Combinations of a Phone Number (0) | 2022.03.22 |
(Leet Code JS)Multiply Strings (0) | 2022.03.21 |
(Leet Code JS)House Robber II (0) | 2022.03.16 |
(Leet Code JS)House Robber (0) | 2022.03.14 |