Post

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

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

문제 링크

문제 링크

성능 요약

메모리: 4.22 MB, 시간: 0.32 ms

구분

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

채점결과

정확성: 100.0
합계: 100.0 / 100.0

문제 설명

양의 정수 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까지 숫자를 채울 수 있습니다.

    행 \ 열0123
    01234
    11213145
    21116156
    310987

    따라서 [[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까지 숫자를 채울 수 있습니다.

    행 \ 열01234
    012345
    1161718196
    2152425207
    3142322218
    4131211109

    따라서 [[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 합니다.

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

코드

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
41
42
43
44
45
46
47
48
49
50
#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer(n, vector<int>(n));

    int num = 1; 
    int x = 0, y = 0; 
    int direction = 0; 
    
    for (int i = 0; i < n * n; i++) {
        answer[y][x] = num; 

        if (direction == 0) {
            if (x == n - 1 || answer[y][x + 1] != 0) {
                direction = 1;
                y++;
            } else {
                x++;
            }
        } else if (direction == 1) {
            if (y == n - 1 || answer[y + 1][x] != 0) {
                direction = 2;
                x--;
            } else {
                y++;
            }
        } else if (direction == 2) {
            if (x == 0 || answer[y][x - 1] != 0) {
                direction = 3;
                y--;
            } else {
                x--;
            }
        } else if (direction == 3) {
            if (y == 0 || answer[y - 1][x] != 0) {
                direction = 0;
                x++;
            } else {
                y--;
            }
        }

        num++;
    }

    return answer;
}
This post is licensed under CC BY 4.0 by the author.