코드굽는 타자기

SWEA[1954] - 달팽이 숫자[D2] 본문

알고리즘/Simulation

SWEA[1954] - 달팽이 숫자[D2]

bright-jun 2020. 1. 21. 19:47

링크

SWEA[1954]

문제설명

  • 달팽이 숫자[D2]

문제풀이

  • 규칙성 찾는문제도 가능
  • 시뮬레이션 문제도 가능

문제코드

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

class Solution
{
    public static void main(String args[]) throws Exception
    {
        //System.setIn(new FileInputStream("res/test.txt"));

        int[][]dir = {{0,1},//우하좌상
                {1,0},
                {0,-1},
                {-1,0}
        };

        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();
            int [][]map = new int[N][N];
            int r=0;
            int c=0;
            int nr=0;
            int nc=0;
            int len = N-1;
            int dir_= 0;
            int cnt = 0;
            while(cnt<N*N) {
                map[r][c]=cnt+1;
                nr = r + dir[dir_][0];
                nc = c + dir[dir_][1];

                if(nr>=0 && nr<N && nc>=0 && nc<N) {
                    if(map[nr][nc]!=0) {//숫자에부딪힌 경우
                        dir_ = (dir_+1)%4;
                        nr = r + dir[dir_][0];
                        nc = c + dir[dir_][1];
                        r = nr;
                        c = nc;
                    }else {
                        r = nr;
                        c = nc;
                    }
                }else {    //벽에부딪힌경우
                    dir_ = (dir_+1)%4;
                    nr = r + dir[dir_][0];
                    nc = c + dir[dir_][1];
                    r = nr;
                    c = nc;
                }
                cnt++;
            }

            System.out.println("#"+test_case);
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    System.out.printf("%d ",map[i][j]);
                }
                System.out.println();
            }
        }
    }
}

아쉬운점

  • 규칙성 찾아서 시도 : length가 2씩 줄면서 출력하는구조
  • for 문 여러개 쓸 때, loop탈출 힘들었음 break가 반복문 끝에있어서 탈출을 못한것 같음.
  • 시뮬레이션으로 시도 : while문으로 지렁이가 직접 탐색하면서 자국남기는 방식이 좀더 쉬웠음
  • while문 사용할 때 시간초과났었음(왜인지는 모르겠음)
  • if else 상황별 행동 설정 꼼꼼히 못했음

잘한점

  • 시뮬레이션으로 품
Comments