https://programmers.co.kr/learn/courses/30/lessons/68645
#include <string>
#include <vector>
using namespace std;
#define ROW 1001
#define COL 1001
int arr[ROW][COL] = { 0, };
int dirX[3] = { 0,1,-1 };
int dirY[3] = { 1,0,-1 };//아래,오른,대각위
vector<int> solution(int n) {
vector<int> answer;
int startX(0);
int startY(0);
int Loop(n);
int startNum(1);
for (int i = 0; i < Loop; i++)
{
int dir = i % 3;//방향3개
for (int j = 0; j < n; j++)
{
if (i == 0 && j == 0)
{
arr[startY][startX] = startNum;
startNum++;
continue;
}
startX += dirX[dir];
startY += dirY[dir];
arr[startY][startX] = startNum;
startNum++;
if (j == n - 1) n--;
}
}
for (int i = 0; i < COL; i++)
{
for (int j = 0; j < ROW; j++)
{
if (arr[i][j] == 0) break;
else
{
answer.push_back(arr[i][j]);
}
}
}
return answer;
}
int main()
{
vector<int> vTemp = solution(4);
return 0;
}
n, n-1...1까지해서 총 n개만큼 루프는 돌리는거고,
3방향 갈때마다 방향 바꿔주는거 dirX/dirY설정하고,
2중루프중 마지막에서 if (j == n - 1) n--; 한다.