티스토리 뷰

Algorithm

[SWEA/1954] 달팽이 숫자

도도고영 2024. 10. 27. 19:53

문제

N*N 이차원 배열에 숫자를 달팽이 모양(시계방향)으로 담아라

 

풀이

1) 이차원 배열 생성

2) 돌면서... 값 넣어주기

 

돌면서 값 넣어주기를 어떻게 할것인가...

N이 4인경우

 

배열을 모두 0으로 초기화 해준다.

방향 변수(direction)를 두어 0, 1, 2, 3의 방향으로 이동할거다.

만약 다음 이동할 좌표의 값이 0이 아니거나 배열 범위 밖일 경우 방향 변수 값을 +1해준다.

 

dx {0, 1, 0, -1}

dy {1, 0, -1, 0}

 

종료 조건은 N^2 크기의 배열이 모두 찬 경우다!

 

import java.util.Scanner;
import java.io.FileInputStream;
 
/*
   사용하는 클래스명이 Solution 이어야 하므로, 가급적 Solution.java 를 사용할 것을 권장합니다.
   이러한 상황에서도 동일하게 java Solution 명령으로 프로그램을 수행해볼 수 있습니다.
 */
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 direction = 0;
            int[] dx = {0, 1, 0, -1};
            int[] dy = {1, 0, -1, 0};
             
            // 좌표
            int x = 0;
            int y = 0;
             
            // 입력과 결과 변수
            int N = sc.nextInt();
            int[][] result = new int[N][N];
             
            for(int i = 1; i <= N * N; i++)
            {
                result[x][y] = i;
                int tempX = x + dx[direction];
                int tempY = y + dy[direction];
                 
                // 이동하려는 x,y 값이 0~(N-1) 범위를 벗어나거나 이미 값이 채워져 있으면 방향 변경
                if(tempX < 0 || tempX >= N || tempY < 0 || tempY >= N || result[tempX][tempY] != 0) 
                {
                    direction = (direction + 1) % 4;
                    tempX = x + dx[direction];
                    tempY = y + dy[direction];
                }
                 
                x = tempX;
                y = tempY;
             
            }
             
            System.out.println("#" + test_case);
            for(int i = 0; i < N; i++)
            {
                for(int j = 0; j < N; j++) 
                {
                    System.out.print(result[i][j] + " ");
                }
                System.out.println();
            }
 
        }
    }
}

 

아우 겨우 풀었다~

'Algorithm' 카테고리의 다른 글

[SWEA/2072] 홀수만 더하기  (1) 2024.10.13
[프로그래머스/자바] 폰켓몬  (3) 2024.10.06
[백준1004번/자바] 어린 왕자  (4) 2024.07.14
[백준9375번/자바] 패션왕 신해빈  (0) 2024.07.05
[백준13305번/자바] 주유소  (0) 2024.07.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함