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개의 댓글

관련 채용 정보