본문 바로가기

CodingTEST

[SW Expert D2] 1954. 달팽이 숫자

반응형

1954. 달팽이 숫자

 

SW Expert Academy

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

swexpertacademy.com

 

 

문제 분석

 

  • 달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다.
  • 다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력해라

 

해결 포인트

 

  • 달팽이가 움직이는 방향 배열을 구현 (상하좌우)
    •  int [] dx = {0, +1, 0, -1};
       int [] dy = {1 , 0, -1, 0};
  • 0미만 N초과 체크를 쉽게하기 위해 배열의 크기를 2 크게 설정
  • 배열의 다음 인덱스를 확인할 때 숫자가 0이 아니면 (수가 존재하지 않으면) 방향 전환
 if (nums[x+dx[move]][y+dy[move]] != 0) {
	move = (move + 1) % 4;
}

 

 

코드

 

import java.util.*;

class Solution {
    public static void main(String args[]) throws Exception {
        //System.setIn(new FileInputStream("res/input.txt"));
        Scanner sc = new Scanner(System.in);
        int T;
        T = sc.nextInt();

        for (int test_case = 1; test_case <= T; test_case++) {
            int N = sc.nextInt();

            int [] dx = {0, +1, 0, -1};
            int [] dy = {1 , 0, -1, 0};

            int[][] nums = new int[N+2][N+2];

            int x = 1;
            int y = 1;
            int move = 0;

            for (int i = 0; i < N+2; i++) {
                nums[0][i] = -1;
                nums[i][0] = -1;
                nums[N+1][i] = -1;
                nums[i][N+1] = -1;
            }

            for (int i = 1; i <= N*N; i++) {
                nums[x][y] = i;

                if (nums[x+dx[move]][y+dy[move]] != 0) {
                    move = (move + 1) % 4;
                }

                x += dx[move];
                y += dy[move];
            }

            System.out.println("#"+ test_case);
            for (int i = 1; i <= N; i++) {
                for (int j = 1; j <= N; j++) {
                    System.out.print(nums[i][j] + " ");
                }
                System.out.println();
            }
        }
    }
}
반응형