흔한 달팽이 알고리즘이다.
유튜브를 보면서 문제 풀이를 공부하고 이해했다.
public int[,] solution(int n)
{
int[,] answer = new int[n, n];
int cnt = 1;
int i = 0;
int j = 0;
answer[i, j] = cnt++;
int[] di = new int[] { 0, 1, 0, -1 };
int[] dj = new int[] { 1, 0, -1, 0 };
int dr = 0;
while (cnt <= n * n)
{
int ni = i + di[dr];
int nj = j + dj[dr];
if ((ni >= 0 && ni < n) && (nj >= 0 && nj < n) && answer[ni, nj] == 0)
{
i = ni;
j = nj;
answer[i, j] = cnt++;
}
else
dr = (dr + 1) % 4;
}
return answer;
}
BFS 길찾기 할떄도 쓰였던 상하좌우 이동 로직을 사용하였다.
다음 이동할 위치를 미리 설정해 놓기. => 가능하지 않는다면? 회전해야 할 타이밍!