[swexpert] 1954. 달팽이 숫자 (java, D2)

728x90
반응형

n이 4이면 4의 제곱인 16까지 증가시키며 써주면 된다. 

 

이동 방향을 보면 x값 증가, y 값 증가, x 값 감소, y값 감소 순으로 이동한다. 

 

dr, dc에 위의 순서에 해당하게 써준다. cur는 방향을 바꿀 때마다 1씩 증가한다.

 

cur를 4로 나눠주면 순환되는 이동 방향에 따라 증가 혹은 감소시키는 값이 나오게 된다.

 

계속 진행하다가 num이 n*n 보다 커지면 끝내준다.  

 


import java.util.Scanner;

public class Solution {
	
	static int dr[]= {1,0,-1,0};
	static int dc[]= {0,1,0,-1};

	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int t=sc.nextInt();
		for (int i = 0; i <t; i++) {
			System.out.println("#"+(i+1));
			int n=sc.nextInt();
			int num=1;
			int arr[][]=new int[n][n];
			
			int x=0;
			int y=0;
			arr[y][x]=num++;
			int cur=0; // 진행 방향 0, 1, 2, 3, ... 증가 

			while(true) {
				if(num>n*n)break;
				int dy=y+dc[cur%4];
				int dx=x+dr[cur%4];
				
				if(dy<0 || dy>=n || dx<0 || dx>=n || arr[dy][dx]!=0) {
					cur+=1;
					continue;
				}
				arr[dy][dx]=num++;
				y=dy;
				x=dx;
			}
			
			for (int j = 0; j < n; j++) {
				for (int j2 = 0; j2 < n; j2++) {
					System.out.print(arr[j][j2]+" ");
				}
				System.out.println();
			}
			
			
		}
		sc.close();
	}
	
	
}
	


728x90
반응형
TAGS.

Comments