Skip to content

Commit 508129a

Browse files
committed
sprial-matrix solution
1 parent d8e7390 commit 508129a

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

spiral-matrix/jungsiroo.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from collections import deque
2+
3+
"""
4+
BFS의 아이디어를 차용하여 풀이
5+
6+
끝에서부터 안쪽으로 돌아가야하기에 미리 돌아갈 방향 지정 : (dx, dy)
7+
한칸씩 이동해가면서 범위 밖을 넘어갔거나 이미 visit한 데이터가 발견되면 방향을 꺾음
8+
9+
Tc : O(m*n)
10+
Sc : O(m*n)
11+
"""
12+
13+
# r, d, l ,u
14+
dx = [0,1,0,-1]
15+
dy = [1,0,-1,0]
16+
17+
class Solution:
18+
def __init__(self):
19+
self.m = 0
20+
self.n = 0
21+
22+
def in_range(self, r, c):
23+
if r<0 or r>=self.m or c<0 or c>=self.n:
24+
return False
25+
return True
26+
27+
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
28+
INF = int(1e9)
29+
d = 0
30+
self.m, self.n = len(matrix), len(matrix[0])
31+
r, c = 0, 0
32+
33+
ret = []
34+
35+
for _ in range(self.m * self.n):
36+
ret.append(matrix[r][c])
37+
if not self.in_range(r+dx[d], c+dy[d]) or matrix[r+dx[d]][c+dy[d]] == INF:
38+
d = (d+1)%4
39+
matrix[r][c] = INF
40+
r, c = r+dx[d], c+dy[d]
41+
42+
return ret
43+
44+

0 commit comments

Comments
 (0)