You will be fine

<Algorithm> 127. 킹(BJO)

by BFine
반응형

1. 킹(BJO)

  • 시뮬레이션 문제

  • 처음에는 단순 구현으로 하다가 코드가 너무 길어지는 것 같아서 예외처리 형태로 만들면 깔끔하게 구현할 수 있을 것 같았다.

  • 푸는데 상당히 오래걸렸는데 그 이유가 문제를 잘 살펴보지 않아서 체스판이 1~8 일줄 알았는데 8 ~ 1이었다...

  • 디버그 할때 for문에서 마지막 br.readLine()에서 멈춰서 입력 오류인줄 알았는데 알고보니 엔터를 쳐야 다시 진행이 되었다.

  • 한줄한줄 읽기 때문에 복붙만하면 마지막은 입력이 안된 상태로 디버그가 되어 마치 멈춘거 같지만 입력을 기다리는 상태였다. 

  • 디버그 할때 교훈을 얻게 되었다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[][] arr = new int[8][8];
        int[] alp = new int[100];
        int[] sw = {7,6,5,4,3,2,1,0};
        for(int i = 0; i < ; i++){
            alp['A'+i] = i;
        }
        /******************************
         * 예외처리를 이용하여 돌과 킹이 판밖으로
         * 넘어가는 경우는 Exception을 발생시켜 
         * 무시하고 다음것을 처리하여 위치를 구한다.
         *******************************/
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        String k = st.nextToken();
        Pair king = new Pair(sw[(k.charAt(1)-'0')-1],alp[k.charAt(0)]);
        String s = st.nextToken();
        Pair stone = new Pair(sw[(s.charAt(1)-'0')-1],alp[s.charAt(0)]);
        int n = Integer.parseInt(st.nextToken());
        HashMap<String,Integer> dx = new HashMap<>();
        HashMap<String,Integer> dy = new HashMap<>();
        dx.put("R",0);      dy.put("R",1);
        dx.put("L",0);     dy.put("L",-1);
        dx.put("B",1);      dy.put("B",0);
        dx.put("T",-1);     dy.put("T",0);
 
        dx.put("RT",-1);    dy.put("RT",1);
        dx.put("LT",-1);    dy.put("LT",-1);
        dx.put("RB",1);     dy.put("RB",1);
        dx.put("LB",1);     dy.put("LB",-1);
 
        for(int i = 0; i < n ; i++){
            try{
                String str = br.readLine();
                int kx = king.x;
                int ky = king.y;
                int sx = stone.x;
                int sy = stone.y;
 
                kx = kx + dx.get(str);
                ky = ky + dy.get(str);
                if(kx == sx && ky == sy){
                    sx = sx + dx.get(str);
                    sy = sy + dy.get(str);
                    arr[sx][sy] = 2;
                }
                arr[kx][ky] = 1;
 
                king.x = kx;
                king.y = ky;
                stone.x = sx;
                stone.y = sy;
 
            }catch (Exception e){
                continue;
            }
        }
        char[] res = {'A','B','C','D','E','F','G','H'};
        System.out.println(res[king.y]+""+(sw[(king.x)]+1));
        System.out.println(res[stone.y]+""+(sw[(stone.x)]+1));
    }
    static class Pair{
        int x,y;
        public Pair(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}
 
cs



참고 & 출처  

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기