import java.util.Scanner;
public class SnailNumber {
static int[] dr = {0,1,0,-1};
static int[] dc = {1,0,-1,0};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
int N = sc.nextInt();
int[][] map = new int[N][N];
int num = 1;
int row = 0;
int col =0;
int index = 0;
int dir=0;
map[0][0] = num;
num++;
while (true){
if(num>N*N)
break;
dir = index%4;
int nrow = row + dr[dir];
int ncol = col + dc[dir];
if(nrow>=N||ncol>=N||nrow<0||ncol<0){
index++;
}
else if(map[nrow][ncol]==0){
map[nrow][ncol] = num;
row = nrow;
col = ncol;
num++;
}
else {
index++;
}
}
StringBuilder sb = new StringBuilder();
sb.append("#").append(" ").append(test_case).append("\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
sb.append(map[i][j]).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}
}
예전에는 비슷한문제를 dfs로 푼적도 있고, 상하좌우 for문 4개를 통해 푼적도 있는데,
이 코드가 제일 정석적인것 같다. 예전 코드는 어거지로 푸는 느낌이 있다.