class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
m = len(matrix)
n = len(matrix[0])
x, y = 0, 0
answer = []
while n > 1 and m > 1:
# top row
for dy in range(y, y + n - 1):
answer.append(matrix[x][dy])
# right col
for dx in range(x, x + m - 1):
answer.append(matrix[dx][y + n - 1])
# bottom row
for dy in range(y + n - 1, y, -1):
answer.append(matrix[x + m - 1][dy])
# left col
for dx in range(x + m - 1, x, -1):
answer.append(matrix[dx][y])
n -= 2
m -= 2
x += 1
y += 1
if n == 1:
if m == 1:
# 1*1
answer.append(matrix[x][y])
else:
# 1*m (col)
for dx in range(x, x + m):
answer.append(matrix[dx][y])
else:
if m == 1:
# n*1 (row)
for dy in range(y, y + n):
answer.append(matrix[x][dy])
return answer
명절에 한 3시간 시도하고 여러번 실패했다가 오늘 성공.
n, m에도 변화가 생기고, x, y에도 변화가 생긴다는 점에 유의해서
좌표를 설정해주면 되는 문제.