프로그래머스 정수를 나선형으로 배치하기

yun·2024년 4월 17일
0

Python

목록 보기
13/13
def solution(n):
    answer = [[0] * n for _ in range(n)]
    
    count = 1
    
    start_row = 0
    start_col = 0
    end_row = n - 1
    end_col = n - 1
    
    while count <= n*n :
        for i in range(start_col, end_col + 1):
            answer[start_row][i] = count
            count += 1
        start_row += 1

        for i in range(start_row, end_col + 1):
            answer[i][end_col] = count
            count += 1
        end_col -= 1

        for i in range(end_col, start_col - 1, -1):
            answer[end_row][i] = count
            count += 1
        end_row -= 1

        for i in range(end_row, start_row - 1, -1):
            answer[i][start_col] = count
            count += 1
        start_col += 1

    return answer
  1. 0으로만 이루어진 2차원 만들기
  2. 나선형으로 배치하려면 각 방향의 마지막 인덱스에 도착할 때마다 방향을 바꿔주어야 하고, 이후 같은 방향에 배치할 때 한 칸 차이나는 곳에서 시작해야 하므로 시작행/시작열/종료행/종료열을 저장하는 변수가 필요
  3. 마지막 배치된 숫자는 n의 제곱보다 1 작은 수이므로 count가 n 이하인 동안 반복한다.
  4. 우측으로, 아래로 움직일 때에는 인덱스가 1씩 증가하면 되지만, 좌측으로, 위로 움직일 때는 인덱스가 감소(-1씩 증가)해야 하므로 range에서 -1씩 step을 준다.

0개의 댓글