코딩테스트/프로그래머스 - LV 0

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

웅드 2024. 2. 8. 16:45

 

  • 풀이
#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer(n,vector<int>(n,0));
    int num = 1; // start number
    int x1=0,x2=n-1;
    int y1=0,y2=n-1;
    
    while(num <= n*n){
    	// y가 1행일때 x 채우기
        for(int i = x1; i <= x2; ++i){ 
            answer[y1][i] = num++;
        }
        y1++; // 1행을 채웠으므로 2행 채울 수 있게 y1++
        // 나선형으로 채워야 하기 때문에 x의 마지막 열에 y값 채우기
        for(int i = y1; i <= y2; ++i){
            answer[i][x2] = num++;
        }
        x2--; // x의 마지막 값을 채워 넣었기 때문에 x2--
        //y의 마지막 행 x값 채우기
        for(int i = x2; i >= x1; --i){
            answer[y2][i] = num++;
        }
        y2--; // y의 마지막 행 채웠기 때문에 y2--
        //x의 첫번째 열에 y 값 채우기
        for(int i = y2; i >= y1; --i){
            answer[i][x1] = num++;
        }
        x1++; // 첫번째 열에 값을 채워 넣었기 때문에 x1++
    }    
    return answer;
}
반응형