Categories: SWEA

SWEA 1954 달팽이 숫자 D2 (자바 Java)

SWEA 1954 달팽이 숫자

문제 정보

  • 문제 출처 : SW Expert Academy
  • 문제 번호 : 1954
  • 문제 제목 : 달팽이 숫자
  • 문제 난이도 : D2
  • 풀이 언어 : Java

문제

1부터 N x N 까지의 2차원 배열의 숫자를 달팽이(나선형) 모양으로 출력하는 문제

접근

반복문을 이용해서 2차원 배열을 달팽이(나선형) 모양으로 채운 뒤 출력

풀이

  1. Scanner sc = new Scanner(System.in);
    • 입력을 받기 위한 Scanner 객체를 생성한다.
  2. int T; T=sc.nextInt();
    • 테스트 케이스의 수 T를 입력 받는다.
  3. for(int test_case = 1; test_case <= T; test_case++) { … }
    • 입력 받은 테스트 케이스의 수만큼 반복하는 루프를 생성한다.
  4. int N = sc.nextInt();
    • 각 테스트 케이스마다 배열의 크기 N을 입력 받는다.
  5. System.out.println(“#” + N);
    • 테스트 케이스 번호를 출력한다.
  6. int[][] arr = new int [N][N];
    • N x N 크기의 정수형 2차원 배열 arr을 생성한다.
  7. int minRow = 0, maxRow = N – 1; int minCol = 0, maxCol = N – 1;
    • 나선형을 그리기 위한 시작 행(minRow), 끝 행(maxRow), 시작 열(minCol), 끝 열(maxCol)을 초기화한다.
  8. int value = 1;
    • 배열에 채워질 첫 번째 값으로 1을 초기화한다.
  9. while (value <= N * N) { … }
    • value가 N x N 이하일 때까지 반복하여 배열을 채운다.
  10. 나선형 패턴을 만드는 네 개의 for 루프:
    • 오른쪽으로 이동하며 상단 행 채우기.
    • 아래쪽으로 이동하며 오른쪽 열 채우기.
    • 왼쪽으로 이동하며 하단 행 채우기.
    • 위쪽으로 이동하며 왼쪽 열 채우기.
    • 각 이동 후에는 해당 경계를 좁혀 다음 나선 순환을 위해 준비한다.
  11. for (int i = 0; i < arr.length; i++) { … }
    • 생성된 나선형 배열을 출력한다.

후기

배열을 채울 때 방향 전환이 헷갈려서 조금 시간이 걸렸던 문제이다.

코드

Java
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();
            System.out.println("#" + N);
             
            int[][] arr = new int [N][N];
             
            int minRow = 0, maxRow = N - 1;
            int minCol = 0, maxCol = N - 1;
             
            int value = 1;
             
            while (value <= N * N) {
                // 오른쪽으로 이동
                for (int i = minCol; i <= maxCol; i++) {
                    arr[minRow][i] = value++;
                }
                minRow++;
 
                // 아래쪽으로 이동
                for (int i = minRow; i <= maxRow; i++) {
                    arr[i][maxCol] = value++;
                }
                maxCol--;
 
                // 왼쪽으로 이동
                for (int i = maxCol; i >= minCol; i--) {
                    arr[maxRow][i] = value++;
                }
                maxRow--;
 
                // 위쪽으로 이동
                for (int i = maxRow; i >= minRow; i--) {
                    arr[i][minCol] = value++;
                }
                minCol++;
            }
 
            for (int i = 0; i < arr.length; i++) {
                for (int j = 0; j < arr[0].length; j++) {
                    if (j != 0) {
                        System.out.print(" ");
                    }
                    System.out.print(arr[i][j]);
                }
                System.out.println();
            }
        }
    }
}
Java
suover

Recent Posts

Java 자바 Enum 열거형 사용법

Enum이란? Enum은 "enumeration"의 줄임말로, 특정 값들의 집합을 정의할 수 있는 특별한 클래스입니다. 예를 들어, 요일,…

3주 ago

Java 자바 래퍼 클래스(Wrapper Class)란? 래퍼 클래스의 필요성

래퍼 클래스(Wrapper Class)란? 자바에서 래퍼 클래스는 기본 데이터 타입(Primitive Data Type)을 객체(Object)로 감싸는 클래스입니다. 자바의…

3주 ago

Java 자바 StringBuilder 개념 및 특징 주요 메소드

서론 Java에서 문자열을 다룰 때, 문자열의 변경이 빈번하게 발생하는 경우라면 StringBuilder 클래스를 사용하는 것이 매우…

4주 ago

웹 개발 FitOn 팀 프로젝트 회고

서론 현대인들은 점점 더 운동과 건강에 대한 관심을 가지고 있으며, 이를 체계적으로 관리하고 공유할 수…

1개월 ago

Java 자바 String 클래스 특징 및 메소드

String 클래스란? 자바에서 String 클래스는 가장 널리 사용되는 클래스 중 하나입니다. 문자열 시퀀스를 나타내며, 문자열을…

2개월 ago

Java 자바 불변 객체(Immutable Object) 개념 정리

불변 객체란? 불변 객체(Immutable Object)는 생성된 이후 그 상태를 변경할 수 없는 객체를 의미합니다. 불변…

2개월 ago