흔한 달팽이 문제다
며칠 전에 본 기업 코테에서도 변형 달팽이 문제가 나왔는데 잘 알아두면 좋을 것 같다
1. 방문 배열을 이용하는 방법,
2. 세로길이 가로길이 세가면서 방향 턴 하는 방법
정도가 있을 것 같은데 하나하나 조건 걸기 귀찮아서 1번으로 풀이했다.
방향 바꾸는 조건 작성에서 실수하지 않는 게 중요하다. 특히 dxdy는 오타 한번 내면 찾을 수가 없다...
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
def change_dir(x):
return (x+1)%4
dx,dy=[1,0,-1,0],[0,1,0,-1]
res=[]
n,m = len(matrix), len(matrix[0])
d = 0
v = [[False]*m for _ in range(n)]
x, y =0,0
for _ in range(n*m):
res.append(matrix[y][x])
v[y][x] = True
nx, ny = x+dx[d], y+dy[d]
if 0>nx or nx>=m or 0>ny or ny>=n or v[ny][nx]:
d = change_dir(d)
nx, ny = x+dx[d], y+dy[d]
x, y = nx, ny
return res
'Dev > Algorithm' 카테고리의 다른 글
138. Copy List with Random Pointer (Medium) (0) | 2024.11.07 |
---|---|
127. Word Ladder (Hard) (0) | 2024.11.07 |
994. Rotting Oranges (Medium) (0) | 2024.11.01 |
5. Longest Palindromic Substring (Medium) (0) | 2024.11.01 |
소프티어 성적 평균 (0) | 2024.11.01 |