Skip to content

Commit af8cf15

Browse files
committed
feat: Spiral Matrix 문제 풀이
1 parent a48a5a9 commit af8cf15

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

spiral-matrix/unpo88.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
class Solution:
2+
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
3+
result = []
4+
5+
while matrix:
6+
# 1. 맨 위 행을 통째로 추가
7+
result += matrix.pop(0)
8+
9+
# 2. 나머지를 90도 반시계 회전
10+
matrix = list(zip(*matrix))[::-1]
11+
12+
return result
13+
14+
15+
"""
16+
================================================================================
17+
풀이 과정
18+
================================================================================
19+
20+
[접근] 행 추출 + 회전
21+
────────────────────────────────────────────────────────────────────────────────
22+
1. 아이디어:
23+
- 맨 위 행을 떼어내고
24+
- 남은 행렬을 반시계로 90도 회전
25+
- 반복하면 자연스럽게 spiral 순서가 됨
26+
27+
2. 동작 예시: matrix = [[1,2,3],[4,5,6],[7,8,9]]
28+
29+
Step 1: pop [1,2,3] → result = [1,2,3]
30+
[[4,5,6], 회전 [[6,9],
31+
[7,8,9]] ────────→ [5,8],
32+
[4,7]]
33+
34+
Step 2: pop [6,9] → result = [1,2,3,6,9]
35+
[[5,8], 회전 [[8,7],
36+
[4,7]] ────────→ [5,4]]
37+
38+
Step 3: pop [8,7] → result = [1,2,3,6,9,8,7]
39+
[[5,4]] 회전 [[4],
40+
────────→ [5]]
41+
42+
Step 4: pop [4] → result = [1,2,3,6,9,8,7,4]
43+
[[5]] 회전 [[5]]
44+
────────→
45+
46+
Step 5: pop [5] → result = [1,2,3,6,9,8,7,4,5]
47+
[] → 종료
48+
49+
결과: [1,2,3,6,9,8,7,4,5]
50+
51+
3. 회전 원리: list(zip(*matrix))[::-1]
52+
- zip(*matrix): 열 단위로 묶기 (전치)
53+
- [::-1]: 뒤집기 (반시계 회전)
54+
55+
[[4,5,6], zip(*) [(4,7), [::-1] [(6,9),
56+
[7,8,9]] ────────→ (5,8), ────────→ (5,8),
57+
(6,9)] (4,7)]
58+
59+
4. 시간복잡도: O(m × n) - 모든 원소 한 번씩 처리
60+
5. 공간복잡도: O(m × n) - 회전할 때마다 새 배열 생성
61+
"""

0 commit comments

Comments
 (0)