코딩테스트-정수를 나선형으로 배치하기

728x90
반응형

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

제한사항 
1 <= n <= 30

입출력 예

 

정답 해설 

n * n 의 숫자에 해당하는 값의 위치부터 시작해(n이 4인 경우 num = 16)  num을 감소시키면서 나선형방향으로 회전해 배열을 채우는 방식으로 구현

 

#include <string>
#include <vector>

using namespace std;

static void fill_dir(int &op, bool dir)
{
    dir == true ? op++ : op--;
}

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer(n, vector<int>(n, 0));
    bool c_dir, r_dir, dir;
    int r, c;
    int num = n*n, ccnt = 1;
    
    r = c = (n / 2);
    r_dir = (num % 2 == 0) ? true : false;
    r = (r_dir == true) ? r - 1 : r;
    c_dir = !r_dir;

    while(num != 0) {
        dir = r_dir;
        for(int k = 0; k < 2; k++)  {
            for(int i = 0; i < ccnt; i++)   {
                answer[c][r] = num--;
                if(k == 0)  {
                    fill_dir(r, dir);
                }
                else {
                    fill_dir(c, dir);
                }

                if(num == 0)    {
                    ccnt = 0;
                }
            }
            dir = c_dir;
        }
        ccnt++;
        c_dir = !c_dir;
        r_dir = !r_dir;
    }

    return answer;
}

 

프로그래머스 코테에서 나름 높게 나온 점수의 코드다. 

 

- 끝 -

728x90
반응형