<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 < 8 ; 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 |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 129. 장훈이의 높은 선반(SWExpert) (0) | 2019.03.08 |
---|---|
<Algorithm> 128. 러시아 국기 같은 깃발(SWExpert) (0) | 2019.03.03 |
<Algorithm> 126. 이상한 나라의 덧셈게임(SWExpert) (0) | 2019.02.27 |
<Algorithm> 125. 성수의 프로그래밍 강좌 신청(SWExpert) (0) | 2019.02.26 |
<Algorithm> 124. 수제버거장인(SWExpert) (0) | 2019.02.25 |
블로그의 정보
57개월 BackEnd
BFine