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

YH·2023년 12월 3일
0

문제

정수를 나선형으로 배치하기 : 문제 링크


문제 분석

  • 양의 정수 n이 매개변수로 주어진다. n x n 배열에 1부터 n^2까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return
  • 정수를 저장할 2차원 vector answer을 n X n 크기로 각각을 0으로 초기화. 변수 num를 정수의 시작인 1, row, col 인덱스를 각각 0, for loop의 조건식인 len을 n - 1로 초기화. while loop는 num이 n x n 이하의 조건동안 순환되고, num이 n x n일때 for loop에서 제외되는 경우는 if문을 통해 예외 처리. 시계방향 나선형은 우 -> 하 -> 좌 -> 상 순서대로 수행되므로, for loop 4개를 사용하여 0부터 len 이하의 조건에서 num을 1씩 늘리면서 각 위치에 저장. 우 -> 하 -> 좌 -> 상이 한번 끝나면, len을 2씩 줄이고 row, col 인덱스를 각각 1씩 늘려서, 한칸 안쪽에서 나선형으로 지속적으로 반복. 최종적으로 저장된 answer을 return.

풀이

#include <vector>

using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer(n, vector<int>(n, 0));
    int num = 1, row_idx = 0, col_idx = 0, len = n - 1;
    
    while(num <= n * n) {
        if(row_idx == (n - 1) / 2 && col_idx == n / 2) {
            answer[row_idx][col_idx] = num++;
        }
        for(int i = 0; i < len; ++i) {
            answer[row_idx][col_idx++] = num++;
        }
        for(int i = 0; i < len; ++i) {
            answer[row_idx++][col_idx] = num++;
        }
        for(int i = 0; i < len; ++i) {
            answer[row_idx][col_idx--] = num++;
        }
        for(int i = 0; i < len; ++i) {
            answer[row_idx--][col_idx] = num++;
        }
        len -= 2;
        row_idx++;
        col_idx++;
    }
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글