Algorithm/SWEA

[D2]n1954_달팽이숫자

징주 2021. 8. 4. 04:10

재귀로 짜는 법도 생각해보자

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq

package com.ssafy.algo.n1954_달팽이숫자;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Solution {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int t = Integer.parseInt(br.readLine());
		
		for(int i=0;i<t;i++) {
			int n = Integer.parseInt(br.readLine());
			int snail [][] = new int[n][n];
			int x = 0;
			int y = 0;
			int cnt = 0;
			int k = 1;
			
			while(n * n > k) {
				//->
				for(x=cnt; x< n-1-cnt; x++) {
					snail[y][x] = k;
					k++;
				}
				
				//↓
				for(; y<n-1-cnt; y++) {
					snail[y][x] = k;
					k++;
				}
				
				//<-
				for(; x>cnt; x--) {
					snail[y][x] = k;
					k++;
				}
				
				//↑
				for(; y>cnt; y--) {
					snail[y][x] = k;
					k++;
				}
				cnt++;
				y++; //한바퀴를 다 돌았을때는 y축이 증가되어야한다.  
			}
			
			//홀수일때 가운데
			if(k == n*n) {
				x = n/2;
				y = n/2;
				snail[y][x] = k;
			}
			
			bw.append("#" + (i+1) +"\n");
			
			for(int []f : snail) {
				for(int r : f ) {
					bw.append(r+" ");
				}
				bw.append("\n");
			}
		}
		
		bw.flush();
		bw.close();
		
	}

}