2025. 4. 10.

경계선 값을 정해줘야하는데

그 개념이 아예 없어서 한참을 헤메다가

도저히 안되겠어서 재미나이의 도움을 받았다.

경계값 정하고

경계값까지 가면 방향 바꾸고, 경계값도 --하는 식으로 줄여가면

조금 수월하게 할 수 있을듯하다

#include <vector>
using namespace std;

vector<vector<int>> solution(int n) {
    vector<vector<int>> ans(n, vector<int>(n));
    int col =0, row =0, num = 1; // 내가 입력할 숫자랑 인덱스 설정
    int col_st = 0, col_end = n-1, row_st = 0, row_end = n-1; // 경계선 만들기
    int dir = 0; // 방향 설정 0: 오른쪽, 1: 아래, 2: 왼쪽, 3: 위
    while(num <= n*n){
        ans[row][col] = num++;
        if(dir == 0){ // 0: 오른쪽
            if (col == col_end) { // 제일 끝에 닿으면 방향 아래로 바꾸고, 경계선 변경
            	row++; dir = 1; row_st++;
            } else col++; // 아니면 계속 오른쪽으로 이동
        }
        else if(dir == 1){ //1: 아래
            if (row == row_end){ // 제일 끝에 닿으면 방향 왼쪽으로 바꾸고, 경계선 변경
            	col--; dir = 2; col_end--;
            } else row++;  // 아니면 계속 아래로 이동
        }
        else if(dir == 2){ //2: 왼쪽
            if (col == col_st){ // 제일 끝에 닿으면 방향 위로 바꾸고, 경계선 변경
            	row--;dir = 3; row_end--;
            } else col--; // 아니면 계속 왼쪽으로 이동
        }
        else { //3: 위
            if (row == row_st){ // 제일 끝에 닿으면 방향 오른쪽으로 바꾸고, 경계선 변경
            	col++; dir = 0; col_st++; 
            } else row--; // 아니면 계속 위로 이동
        } 
    }
    return ans;
}

한번 하고나니까 이해가 잘 된다

대박

다른 문제도 비슷하게 풀어봐야지

+ Recent posts