Home [프로그래머스] 정수를 나선형으로 배치하기
Post
Cancel

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

[unrated] 정수를 나선형으로 배치하기 - 181832

문제 링크

성능 요약

메모리: 10.3 MB, 시간: 0.09 ms

구분

코딩테스트 연습 > 코딩 기초 트레이닝

채점결과

Empty

문제 설명

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항
  • 1 ≤ n ≤ 30

입출력 예
nresult
4[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]
5[[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 n의 값은 4로 4 × 4 배열에 다음과 같이 1부터 16까지 숫자를 채울 수 있습니다.

    | 행 \ 열 | 0 | 1 | 2 | 3 | |-------|----|----|----|---| | 0 | 1 | 2 | 3 | 4 | | 1 | 12 | 13 | 14 | 5 | | 2 | 11 | 16 | 15 | 6 | | 3 | 10 | 9 | 8 | 7 |

    따라서 [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]를 return 합니다.

입출력 예 #2

  • 예제 2번의 n의 값은 5로 5 × 5 배열에 다음과 같이 1부터 25까지 숫자를 채울 수 있습니다.

    | 행 \ 열 | 0 | 1 | 2 | 3 | 4 | |-------|----|----|----|----|---| | 0 | 1 | 2 | 3 | 4 | 5 | | 1 | 16 | 17 | 18 | 19 | 6 | | 2 | 15 | 24 | 25 | 20 | 7 | | 3 | 14 | 23 | 22 | 21 | 8 | | 4 | 13 | 12 | 11 | 10 | 9 |

    따라서 [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24, 25, 20, 7], [14, 23, 22, 21, 8], [13, 12, 11, 10, 9]]를 return 합니다.

정답

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# [0][0] → [0][1] → [0][2] → [0][3]
#                             ↓  ↓
# [1][0] → [1][1] → [1][2]   [1][3]
#  ↑  ↑              ↓  ↓     ↓  ↓
# [2][0]   [2][1] ← [2][2]   [2][3]
#  ↑  ↑                       ↓  ↓
# [3][0] ← [3][1] ← [3][2] ← [3][3]

def solution(n):
    array = [[0] * n for _ in range(n)]

    count = 1

    startRow = 0
    endRow = n - 1
    startCol = 0
    endCol = n - 1

    while count <= n * n:
        for i in range(startCol, endCol + 1):
            array[startRow][i] = count
            count += 1
        startRow += 1

        for i in range(startRow, endCol + 1):
            array[i][endCol] = count
            count += 1
        endCol -= 1

        for i in range(endCol, startCol - 1, -1):
            array[endRow][i] = count
            count += 1
        endRow -= 1

        for i in range(endRow, startRow - 1, -1):
            array[i][startCol] = count
            count += 1
        startCol += 1

    return array


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

This post is licensed under CC BY 4.0 by the author.