문제)
달팽이 숫자
package algorithm_lab.day01.hw1;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int t = 1; t <= T; t++) {
int N = sc.nextInt();
int arr[][] = new int[N][N];
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0}, dd[] = {0, 1, 2, 3};
int n = 1, x = 0, y = 0, d = 0; // 디폴트 방향은 오른쪽(우 하 좌 상 순서)
while(n <= N * N) {
int X = x + dx[dd[d]], Y = y + dy[dd[d]];
if(X < 0 || X >= N || Y < 0 || Y >= N || arr[X][Y] != 0) { // 꺾여야 하는 순간이 오면
d = (d + 1) % 4; // 방향 바뀜
X = x + dx[dd[d]]; Y = y + dy[dd[d]];
}
arr[x][y] = n++;
x = X; y = Y;
}
System.out.println("#" + t);
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) System.out.print(arr[i][j] + " ");
System.out.println();
}
}
}
}