[Java] SWEA 1954 달팽이 숫자

Lee GaEun·2024년 11월 5일

[Java] 알고리즘

목록 보기
12/93

1954 달팽이 숫자 문제 링크

문제분석

  • 1부터 N*N까지의 숫자가 시계방향으로 이루어짐
  • 정수 N을 입력 받아 N크기의 달팽이 출력

제약 사항

  • N(1 ≤ N ≤ 10)은 정수

입력 조건

  • 첫째 줄 : 테스트 케이스 수 ( T <= 10 )
  • 둘째 줄 : N(1 ≤ N ≤ 10)

출력 조건

  • #부호 + 테스트 케이스 번호 + "\n"
  • 달팽이 숫자 출력

#1

  • 재귀를 활용하여 달팽이 모양 그대로 들어가며 숫자 출력

import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
    public static void main(String args[]) throws Exception
    {
        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();

            // 배열을 만들어 [N][N] 크기
            int[][] snail = new int[N][N];
            snail = draw(snail, 0, N, 0);

            System.out.println("#"+ test_case);

            for(int i=0; i<N; i++) {
                for(int j=0; j<N; j++) {
                    System.out.print(snail[i][j] + " ");
                }
                System.out.println();
            }
        }
    }
    static int[][] draw(int[][] snail, int i, int N, int number) { // i=0;
        if (N/2.0 <= i) return snail;
        // 배열 가로 i 줄에 N개 넣어
        for(int x=i; x<N-i; x++) {
            snail[i][x] = ++number;
        }
        // 오른쪽 세로 N-i-1 N-1개 넣어
        for(int x=i+1; x<N-i; x++) {
            snail[x][N-1-i] = ++number;
        }
        // 배열 가로 N-i-1 줄에 N-1개 넣어
        for(int x=N-2-i; x>=i; x--) {
            snail[N-1-i][x] = ++number;
        }
        // 왼쪽 세로 i에 N-2개 넣어
        for(int x=N-2-i; x>=1+i; x--){
            snail[x][i] = ++number;
        }
        return draw(snail, ++i, N, number);
    }
}

  • 통과함 (1H)
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글