작심 24/7

[SWEA] 1954번 달팽이 숫자 (JAVA) 본문

SWEA/D2

[SWEA] 1954번 달팽이 숫자 (JAVA)

모닝수박 2021. 2. 2. 23:18
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

위 그림처럼 항상 우, 하, 좌, 상 순서로 꺾이는 형태를 가지고 있다.

 

0,0 부터 오른쪽 방향으로 시작해서

가려는 방향에 이미 다른 숫자가 채워져 있거나 벽을 만나면

그 다음 방향으로 전환하고 다시 나아가게 하면 된다.

import java.util.Scanner;

public class D3_1954_달팽이_숫자 {
	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();
			}
		}
	}
}

 

'SWEA > D2' 카테고리의 다른 글

[SWEA] 1288번 새로운 불면증 치료법 (C++)  (0) 2022.01.18
Comments