문제풀이
[SW Academy] 1954 달팽이 숫자 - JAVA
자르비옹스
2022. 2. 4. 15:09
재귀를 이용하여 겉과 속을 나누어 배열에 저장하였다.
재귀를 사용할 때는 n이 -2씩 줄어들기 때문에 마지막에 n이 1인 경우와 0인 경우로 나뉜다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i = 1; i <= T; i++) {
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int[][] arr = new int[N][N];
sb.append("#").append(i).append('\n');
solution(arr, 0, 0, 1, N);
for (int j = 0; j < arr.length; j++) {
for (int j2 = 0; j2 < arr.length; j2++) {
sb.append(arr[j][j2]).append(" ");
}
sb.append("\n");
}
sb.setLength(sb.length()-1);
System.out.println(sb.toString());
}
}
public static void solution(int[][] arr, int row, int col, int startNum, int n) {
if(n == 1) {
arr[row][col] = startNum;
return;
}else if(n == 0) {
return;
}
// 상
for (int i = col; i < col+n; i++) {
arr[row][i] = startNum++;
}
// 우
for(int i=row+1; i<row+n; i++) {
arr[i][col+n-1] = startNum++;
}
// 하
for(int i=col+n-2;i>=col; i--) {
arr[row+n-1][i] = startNum++;
}
// 좌
for(int i=row+n-2; i>row; i--) {
arr[i][col] = startNum++;
}
solution(arr, row+1, col+1, startNum, n-2);
}
}