이미 있는 데이터와 충돌을 할 경우에 방향을 바꿔주는 방식으로 풀었다
처음에는 방향을 전진하고 난 후에 방향전환을 해서 오류가 생겼었다
#include <iostream>
#include <vector>
#define pii pair<int,int>
#define x first
#define y second
using namespace std;
vector<pii> dir = { {-1,-1}, {0,1}, {1,0} };
int map[1001][1001];
vector<int> solution(int n) {
vector<int> answer;
if (n == 1) { answer = { 1 }; return answer; }
if (n == 2) { answer = { 1,2,3 }; return answer; }
int num = 2 * n;
int h = n-2;
int v = n-2;
int i = 0; //방향인덱스
for (int i = 0; i < n; i++) { //세로가로 초기화
map[i][0] = i + 1;
map[n-1][i] = n + i;
}
while (true) {
map[v][h] = num++;
if (map[v + dir[i].y][h + dir[i].x] != 0) {
if (i == 2)i = 0; else i++;
if (map[v + dir[i].y][h + dir[i].x] != 0)break; //순환한 곳에도 0이 있다면
}
h += dir[i].x;
v += dir[i].y;
}
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
if (map[i][j] == 0)break;
answer.push_back(map[i][j]);
}
}
return answer;
}
int main() {
int n; cin >> n;
solution(n);
}