๋ฌธ์
ํ์ด ๊ณผ์
2์ฐจ์ ๋ฐฐ์ด
์ ์ด์ฉํ ๊ตฌํ ๋ฌธ์ ์
๋๋ค.
๋ฐฐ์ด์ ์์ง์์์ ๊ท์น์ ์ฐพ์ ํ์ ํ๋ ์๋ฎฌ๋ ์ด์
์ ํ ์๋ ์์ง๋ง ์ข ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋กDFS
๋ฅผ ํ์ฉํ์ฌ ๋ชจ๋ ์์น๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
์์์ง์ (0, 0)
์์๋ถํฐ ์ค๋ฅธ์ชฝ, ์๋์ชฝ, ์ผ์ชฝ, ์์ชฝ
์์๋๋ก ๋ฐฉํฅ์ ํ์ด๊ฐ๋ฉฐ ํ์ํฉ๋๋ค.
์ด๋ ๋ฐฉํฅ์ ์ ํํ๋ ์์ ์ ๋ฐฐ์ด์ ๋ฒ์ด๋๊ฑฐ๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ง์ ์ ๋ค์ ๋ฐฉ๋ฌธํ๋ ค๊ณ ํ ๋์
๋๋ค.
์ด๋ฅผ ํ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ก ์ํ๋ ์ฐ์ฐ์ ์ํํ ์ ์์ต๋๋ค.
์ฝ๋
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function (matrix) {
const m = matrix.length;
const n = matrix[0].length;
const dx = [0, 1, 0, -1];
const dy = [1, 0, -1, 0];
const answer = [];
const visit = Array.from(Array(m), () => Array(n).fill(false));
function inRange(x, y) {
return 0 <= x && x < m && 0 <= y && y < n;
}
function dfs(x, y, dir) {
if (!inRange(x, y) || visit[x][y]) return;
visit[x][y] = true;
answer.push(matrix[x][y]);
let nx = x + dx[dir];
let ny = y + dy[dir];
if (inRange(nx, ny) && !visit[nx][ny]) {
dfs(nx, ny, dir);
} else {
dir = (dir + 1) % 4;
nx = x + dx[dir];
ny = y + dy[dir];
dfs(nx, ny, dir);
}
}
dfs(0, 0, 0);
return answer;
};
๋ฐ์ํ
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 226 - Invert Binary Tree (Easy) (0) | 2021.03.03 |
---|---|
LeetCode 406 - Queue Reconstruction by Height (Medium) (0) | 2021.03.03 |
LeetCode 279 - Perfect Squares (Medium) (0) | 2021.03.03 |
LeetCode 94 - Binary Tree Inorder Traversal (Medium) (0) | 2021.03.03 |
LeetCode 394 - Decode String (Medium) (0) | 2021.03.03 |
๐ฌ ๋๊ธ