SWEA 1954 달팽이 숫자
문제 정보
- 문제 출처 : SW Expert Academy
- 문제 번호 : 1954
- 문제 제목 : 달팽이 숫자
- 문제 난이도 : D2
- 풀이 언어 : Java
문제
1부터 N x N 까지의 2차원 배열의 숫자를 달팽이(나선형) 모양으로 출력하는 문제
접근
반복문을 이용해서 2차원 배열을 달팽이(나선형) 모양으로 채운 뒤 출력
풀이
- Scanner sc = new Scanner(System.in);
- 입력을 받기 위한 Scanner 객체를 생성한다.
- int T; T=sc.nextInt();
- 테스트 케이스의 수 T를 입력 받는다.
- for(int test_case = 1; test_case <= T; test_case++) { … }
- 입력 받은 테스트 케이스의 수만큼 반복하는 루프를 생성한다.
- int N = sc.nextInt();
- 각 테스트 케이스마다 배열의 크기 N을 입력 받는다.
- System.out.println(“#” + N);
- 테스트 케이스 번호를 출력한다.
- int[][] arr = new int [N][N];
- N x N 크기의 정수형 2차원 배열 arr을 생성한다.
- int minRow = 0, maxRow = N – 1; int minCol = 0, maxCol = N – 1;
- 나선형을 그리기 위한 시작 행(minRow), 끝 행(maxRow), 시작 열(minCol), 끝 열(maxCol)을 초기화한다.
- int value = 1;
- 배열에 채워질 첫 번째 값으로 1을 초기화한다.
- while (value <= N * N) { … }
- value가 N x N 이하일 때까지 반복하여 배열을 채운다.
- 나선형 패턴을 만드는 네 개의 for 루프:
- 오른쪽으로 이동하며 상단 행 채우기.
- 아래쪽으로 이동하며 오른쪽 열 채우기.
- 왼쪽으로 이동하며 하단 행 채우기.
- 위쪽으로 이동하며 왼쪽 열 채우기.
- 각 이동 후에는 해당 경계를 좁혀 다음 나선 순환을 위해 준비한다.
- 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