[SWEA / Java] 1954. 달팽이 숫자

이하얀·2024년 5월 1일
0

🧢 SWEA

목록 보기
2/10
post-thumbnail

💡 Info



💭 문제 이해

  • N 크기의 달팽이 출력하기(N*N 시계방향)

🚨 제약 사항

  • 달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)

📥입력 조건

  • 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
  • 각 테스트 케이스에는 N이 주어진다.
2    
3   
4

📤출력 조건

  • 각 줄은 '#t'로 시작하고, 다음 줄부터 빈칸을 사이에 두고 달팽이 숫자를 출력한다.
    (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
#1
1 2 3
8 9 4
7 6 5
#2
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7


💭 생각한 알고리즘

실제 풀이 시간 : 47분

  • 상, 하, 좌, 우 순으로 열 또는 행의 경계값이 넘어가지 않도록 계산
  • 그러면서, 동시에 열 또는 행을 감소 또는 증가해서 범위 안으로 들어가도록 상하좌우 계산
import java.util.Scanner;

class Solution {
    public static void main(String args[]) {
        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[][] multi = new int[n][n];

            int r = 0;
            int c = 0;
            int num = 1;

            while (num <= n * n) {
            
                // 우
                while (c < n && multi[r][c] == 0) {
                    multi[r][c++] = num++;
                }
                c--; // 범위를 벗어난 열을 되돌아감
                r++; // 행을 증가시켜 범위 안으로 이동

                // 하
                while (r < n && multi[r][c] == 0) {
                    multi[r++][c] = num++;
                }
                r--; // 범위를 벗어난 행을 되돌아감
                c--; // 열을 감소시켜 범위 안으로 이동

                // 좌
                while (c >= 0 && multi[r][c] == 0) {
                    multi[r][c--] = num++;
                }
                c++; // 범위를 벗어난 열을 되돌아감
                r--; // 행을 감소시켜 범위 안으로 이동

                // 상
                while (r >= 0 && multi[r][c] == 0) {
                    multi[r--][c] = num++;
                }
                r++; // 범위를 벗어난 행을 되돌아감
                c++; // 열을 증가시켜 범위 안으로 이동
            }

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

            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++)
                    System.out.print(multi[i][j] + " ");
                System.out.println();
            }
        }
    }
}


profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글