프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

📄 문제

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

 

📝 풀이

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> arr = vector<vector<int>>(n, vector<int>(n, 0));
    
    int dir = 0; // right, bottom, left, top
    int cnt = pow(n, 2);
    int num = 1;
    int row = 0, col = 0;
    
    arr[0][0] = 1;
    
    while(num <= cnt)
    {
        switch(dir)
        {
            case 0:
                while(col < n - 1 && arr [row][col + 1] == 0)
                {
                    arr[row][col++] = num++;
                }
                dir = 1;
                arr[row][col] = num++;
                ++row;
                break;
            case 1:
                while(row < n - 1 && arr [row + 1][col] == 0)
                {
                    arr[row++][col] = num++;
                }
                dir = 2;
                arr[row][col] = num++;
                --col;
                break;
            case 2:
                while(col >= 1 && arr [row][col - 1] == 0)
                {
                    arr[row][col--] = num++;
                }
                dir = 3;
                arr[row][col] = num++;
                --row;
                break;
            case 3:
                while(row >= 1 && arr [row - 1][col] == 0)
                {
                    arr[row--][col] = num++;
                }
                dir = 0;
                arr[row][col] = num++;
                ++col;
                break;
        }
    }

    return arr;
}
  • while문 내 switch를 통해 방향을 설정한 후 마지막 또는 값이 설정되지 않은 공간에 도달할때까지 값을 부여합니다.
  • 나선형 방향으로 회전하면서 값을 부여합니다.
bonnate