[C++, 프로그래머스 - Lv.0] 정수를 나선형으로 배치하기
사용 언어 : C++
< 문제 내용 >
< 생각 >
문제 해결을 위해서, 값이 상승하는 방향을 잡아주면 해결되는 문제였다.
오른쪽 -> 아래쪽 -> 왼쪽 -> 위쪽
순서로 반복되기 때문에 방향을 잡아줄 변수를 선언하고 해당 방향에 맞게끔 값을 채워넣어주면 된다.
이때, 현재 위치가 배열의 최소 값과 최대 값보다 작거나 클 경우를 대비하여, 다음 위치를 선행 탐색하는 기능을 추가한다.
작거나 크다면, 맵의 바깥에 있다는 것이므로 다음 방향으로 전환해준다.
또, 다음 위치에 존재하는 값이 특정 값이 아니라면, 이미 지나갔다는 소리이므로, 방향을 변경해주면 쉽게 풀 수 있다.
< 해결 내용 >
#include <string>
#include <vector>
using namespace std;
vector<vector<int>> solution(int n) {
vector<vector<int>> answer(n, vector<int>(n, -1));
int dirX[4] = { 0, 1, 0, -1 };
int dirY[4] = { 1, 0, -1, 0 };
int dir = 0;
int x = 0;
int y = 0;
int nextX = 0;
int nextY = 0;
for (int i = 1; i <= n * n; ++i) {
answer[x][y] = i;
nextX = x + dirX[dir];
nextY = y + dirY[dir];
if (nextX < 0 || nextX >= n || nextY < 0 || nextY >= n || answer[nextX][nextY] != -1) {
dir = (dir + 1) % 4;
nextX = x + dirX[dir];
nextY = y + dirY[dir];
}
x = nextX;
y = nextY;
}
return answer;
}
'코테 > 프로그래머스' 카테고리의 다른 글
[C++, 프로그래머스 - Lv.0] 주사위 게임 3 (0) | 2023.07.19 |
---|---|
[C++, 프로그래머스 - Lv.0] 연속된 수의 합 (0) | 2023.07.19 |
[C++, 프로그래머스 - Lv.0] 안전지대 (0) | 2023.07.19 |
[C++, 프로그래머스 - Lv.0] 겹치는 선분의 길이 (0) | 2023.07.04 |
[C++, 프로그래머스 - Lv.0] 옹알이 (1) (0) | 2023.07.04 |