Dev/Algorithm

54. Spiral Matrix (Medium)

rryu09 2024. 11. 1. 15:48

54. Spiral Matrix

흔한 달팽이 문제다

며칠 전에 본 기업 코테에서도 변형 달팽이 문제가 나왔는데 잘 알아두면 좋을 것 같다

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