Skip to content

Commit 66d8c5d

Browse files
author
jinvicky
committed
spiral order solution
1 parent d9dcb24 commit 66d8c5d

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import java.util.*;
2+
3+
/**
4+
* dir[][]์˜ ๋ฐฉํ–ฅ์„ ๋‚˜์„ ์œผ๋กœ ๋งž์ถ”๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”. ๋‹จ์ˆœ dfs, bfs์˜ 4๋ฐฉํ–ฅ์ด ์•„๋‹˜.
5+
*/
6+
class Solution {
7+
public List<Integer> spiralOrder(int[][] matrix) {
8+
List<Integer> ans = new ArrayList<>();
9+
int m = matrix.length;
10+
if (m == 0) return ans;
11+
int n = matrix[0].length;
12+
13+
boolean[][] visited = new boolean[m][n];
14+
15+
// ํ•œ ๋ฐฐ์—ด์— (row, col) ๋ฐฉํ–ฅ์Œ์„ ๋ณด๊ด€: โ†’ โ†“ โ† โ†‘
16+
int[][] dir = {{0,1}, {1,0}, {0,-1}, {-1,0}};
17+
int d = 0; // ํ˜„์žฌ ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค
18+
int i = 0, j = 0; // ํ˜„์žฌ ์œ„์น˜
19+
20+
for (int k = 0; k < m * n; k++) {
21+
ans.add(matrix[i][j]);
22+
visited[i][j] = true;
23+
24+
int ni = i + dir[d][0];
25+
int nj = j + dir[d][1];
26+
27+
// ๊ฒฝ๊ณ„ ๋ฐ–์ด๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ๋ฐฉํ–ฅ ์ „ํ™˜
28+
if (ni < 0 || ni >= m || nj < 0 || nj >= n || visited[ni][nj]) {
29+
d = (d + 1) % 4; // 0โ†’1โ†’2โ†’3โ†’0
30+
ni = i + dir[d][0];
31+
nj = j + dir[d][1];
32+
}
33+
34+
i = ni; j = nj;
35+
}
36+
return ans;
37+
}
38+
}

0 commit comments

Comments
ย (0)