배열에서 반시계로 숫자를 넣으면 되는 문제이다. 범위를 넘어가는 부분에 대한 예외처리를 잘 해주면 되는 문제이다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n) {
vector<int> answer;
vector<vector<int>> board(n, vector<int>(n,0));
int i=0, j=0, num = 1;
while (true) {
bool endFlag = true;
while (i+1 < n && board[i+1][j] == 0) {//아래로 갈수있을때 까지 내림
board[i++][j] = num++;
endFlag = false;
}
if (endFlag) break ;// 움직이지 못했다면 끝
while (j+1 < n && board[i][j+1] == 0) {//오른쪽으로...
board[i][j++] = num++;
endFlag = true;
}
if (!endFlag) break ;// 움직이지 못했다면 끝
while (i-1 > 0 && j-1 > 0 && board[i-1][j-1] == 0) {왼쪽위로..
board[i--][j--] = num++;
endFlag = false;
}
if (endFlag) break ;// 움직이지 못했다면 끝
}
board[i][j] = num;
for(auto col : board)
for (auto num : col)
if (num) answer.push_back(num);
return answer;
}