코드굽는 타자기

SWEA[1211] - Ladder2[D4] 본문

알고리즘/Simulation

SWEA[1211] - Ladder2[D4]

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

링크

SWEA[1211]

문제설명

  • 시뮬

문제풀이

  • 시뮬 + len count

문제코드

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

public class Solution1211 {
    public static int Ans=-1;
    public static int Start;
    public static int Ans_len=0;
    public static int len=Integer.MAX_VALUE;
    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(Ans_len>=len) {
                Ans=Math.max(Ans,Start);
                Ans_len=len;
                return;
            }
            else return;
        }
        len++;
//        map[rc[0]][rc[1]]=8;
//        int debug=0;
        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) {
                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) {
                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) {
                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) {
                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) {
                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) {
                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) {
                Search(new int[] {nr,nc},2);
                break;
            }
            break;

        default:
            break;
        }
    }

    public static void main(String args[]) throws Exception
    {
        System.setIn(new FileInputStream("res/swea/1211.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;
                    len=Integer.MAX_VALUE;
                    Search(new int[] {0,i},2);
                }
            }
             System.out.println("#"+test_case+" "+Ans);
//            초기화
            Ans=-1;
            Ans_len=0;
        }
    }
}

아쉬운점

  • 시작방향 '아래'로 설정안했음

잘한점

  • switch 문 사용해서 품
  • len_count 잘함

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

SWEA[5656] - 벽돌 깨기  (1) 2020.02.19
SWEA[1240] - 단순 2진 암호코드[D3]  (0) 2020.02.17
SWEA[1210] - Ladder1[D4]  (0) 2020.02.17
SWEA[2382] - 미생물 격리  (0) 2020.02.14
SWEA[1258] - 행렬찾기[D4]  (0) 2020.02.13
Comments