SWEA 1954 달팽이 숫자 (Java)

sua_ahn·2023년 1월 11일
0

알고리즘 문제풀이

목록 보기
2/14
post-thumbnail

델타를 이용한 2차원 배열

import java.util.Scanner;

class Solution {
	public static void main(String args[]) throws Exception {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();

		for(int test_case = 1; test_case <= T; test_case++) {
			int N = sc.nextInt();
            int[][] arr = new int[N][N];
            
            int[] dr = {0, 1, 0, -1}; // 델타
            int[] dc = {1, 0, -1, 0}; // 우 하 좌 상
            int row = 0;	// 현재 행
            int col = 0;	// 현재 열
            
            int count = 1;
            int status = 0;				// 델타의 인덱스
            while(count <= N * N) {  
                arr[row][col] = count;	// 달팽이야 앞으로 가
                
                // 달팽이 방향 바꾸기
                int nr = row + dr[status];
                int nc = col + dc[status];
                if(nr < 0 || nr >= N || nc < 0 || nc >= N || arr[nr][nc] != 0 ) {
            		status = (status + 1) % 4;
                }
                // 다음 스텝
                row = nr;
                col = nc;
                count++;
            }
            System.out.println("#" + test_case);
            for (int i = 0; i < N; i++) {
                for(int j = 0; j < N; j++) {
                    System.out.print(arr[i][j] + " ");
                }
                System.out.println();
            }
		}
	}
}
profile
해보자구

0개의 댓글