코드굽는 타자기

SWEA[1210] - Ladder1[D4] 본문

알고리즘/Simulation

SWEA[1210] - Ladder1[D4]

bright-jun 2020. 2. 17. 13:55

링크

SWEA[1210]

문제설명

  • 시뮬

문제풀이

  • 시뮬

문제코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution1210 {
    public static int Ans=-1;
    public static int Start;
    public static int[][] dir = {
            {0,-1},   //좌
            {0,1},     //우
            {1,0}    //하
    };

    public static int[][] map = new int[100][100];

    public static void Search(int[] rc, int now_dir) {
        if(rc[0]==99) {
            if(map[rc[0]][rc[1]]==2) {
                Ans=Start;
                return;
            }
            else return;
        }
        int nr;
        int nc;
        switch (now_dir) {
//        좌
        case 0:
//            하 check
            nr = rc[0] + dir[2][0];
            nc = rc[1] + dir[2][1];
            if (nr>=0 && nr<100 && nc>=0 && nc<100 && (map[nr][nc]==1 || map[nr][nc]==2)) {
                Search(new int[] {nr,nc},2);
                break;
            }
//            아니면 좌로 감
            nr = rc[0] + dir[0][0];
            nc = rc[1] + dir[0][1];
            if (nr>=0 && nr<100 && nc>=0 && nc<100 && (map[nr][nc]==1 || map[nr][nc]==2)) {
                Search(new int[] {nr,nc},0);
                break;
            }
//        우
        case 1:
//            하 check
            nr = rc[0] + dir[2][0];
            nc = rc[1] + dir[2][1];
            if (nr>=0 && nr<100 && nc>=0 && nc<100 && (map[nr][nc]==1 || map[nr][nc]==2)) {
                Search(new int[] {nr,nc},2);
                break;
            }
//            아니면 우로 감
            nr = rc[0] + dir[1][0];
            nc = rc[1] + dir[1][1];
            if (nr>=0 && nr<100 && nc>=0 && nc<100 && (map[nr][nc]==1 || map[nr][nc]==2)) {
                Search(new int[] {nr,nc},1);
                break;
            }
//        하
        case 2:
//            좌우 check
            nr = rc[0] + dir[0][0];
            nc = rc[1] + dir[0][1];
            if (nr>=0 && nr<100 && nc>=0 && nc<100 && (map[nr][nc]==1 || map[nr][nc]==2)) {
                Search(new int[] {nr,nc},0);
                break;
            }
            nr = rc[0] + dir[1][0];
            nc = rc[1] + dir[1][1];
            if (nr>=0 && nr<100 && nc>=0 && nc<100 && (map[nr][nc]==1 || map[nr][nc]==2)) {
                Search(new int[] {nr,nc},1);
                break;
            }
//            아니면 하로 감
            nr = rc[0] + dir[2][0];
            nc = rc[1] + dir[2][1];
            if (nr>=0 && nr<100 && nc>=0 && nc<100 && (map[nr][nc]==1 || map[nr][nc]==2)) {
                Search(new int[] {nr,nc},2);
                break;
            }
            break;

        default:
            break;
        }
    }

    public static void main(String args[]) throws Exception
    {
        System.setIn(new FileInputStream("res/swea/1210.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int T = 10;

        for(int test_case = 1; test_case <= T; test_case++)
        {
            br.readLine();
            for (int i = 0; i < 100; i++) {
                st = new StringTokenizer(br.readLine());
                for (int j = 0; j < 100; j++) {
                    map[i][j]=Integer.parseInt(st.nextToken());
                }
            }

            for (int i = 0; i < 100; i++) {
                if(map[0][i]==1) {
                    Start=i;
                    Search(new int[] {0,i},2);
                    if(Ans!=-1) {
                        break;
                    }
                }
            }
             System.out.println("#"+test_case+" "+Ans);
//            초기화
            Ans=-1;
        }
    }
}

아쉬운점

  • 끝 지점이 2인 것을 체크해야함
  • 탐색할 때, 1만체크해서 끝 지점인 경우 탐색을 안했었음.
  • 시작방향 '아래'로 설정안했음

잘한점

  • switch 문 사용해서 품

'알고리즘 > Simulation' 카테고리의 다른 글

SWEA[1240] - 단순 2진 암호코드[D3]  (0) 2020.02.17
SWEA[1211] - Ladder2[D4]  (0) 2020.02.17
SWEA[2382] - 미생물 격리  (0) 2020.02.14
SWEA[1258] - 행렬찾기[D4]  (0) 2020.02.13
SWEA[9280] - 진용이네 주차타워[D3]  (0) 2020.02.13
Comments