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;
}
한번 하고나니까 이해가 잘 된다
대박
다른 문제도 비슷하게 풀어봐야지
'C++ 문제풀기 > 백준-프로그래머스' 카테고리의 다른 글
| 프로그래머스 | 택배상자꺼내기 (2) | 2025.06.19 |
|---|---|
| 프로그래머스 | 키패드 누르기 (0) | 2025.06.19 |
| 백준 | 1316. 그룹 단어 체커 (0) | 2025.06.17 |
| 백준 | 2941. 크로아티아 알파벳 (0) | 2025.06.17 |
| 백준 | 2606. 바이러스 (DFS) (1) | 2025.06.15 |