Spiral Matrix

박수빈·2022년 2월 4일
0

leetcode

목록 보기
15/51


문제

  • 달팽이처럼 돌면서 숫자 출력하면 된다..!
  • input은 2차원 List
  • output은 1차원 List

풀이

  • m, n 을 미리 구하기
  • m은 행의 갯수
  • n은 열의 갯수
  • n, m > 1 까지 while 문으로 확인
  • 한 줄, 한 칸 -> if 문으로 처리
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에도 변화가 생긴다는 점에 유의해서
좌표를 설정해주면 되는 문제.

profile
개발자가 되고 싶은 학부생의 꼼지락 기록

0개의 댓글