풀이)
문제 조건은 map[0][1] 과 같은 형식이 아닌 A1, B8 과 같은 형식으로 주어진다. 여지껏 풀어왔던 문제들은 모두 보편적인 이차원 배열이었지만 여기서는 이 문제만의 고유한 표기 방식을 사용했다.
하지만 여기서 초점은 결국 한 칸씩 이동할 때 row와 col이 +1,-1 이 된다는 점은 달라지지 않는다는 사실이다.
내 코드
import java.util.*;
import java.io.*;
public class boj1063 {
static char[] king, rock;
static int n;
public static void main(String args[]) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk = new StringTokenizer(bfr.readLine()," ");
king = stk.nextToken().toCharArray(); rock = stk.nextToken().toCharArray(); n = Integer.parseInt(stk.nextToken());
for(int i=0; i<n; i++) {
String cmd = bfr.readLine();
char[] next_king = move(cmd, king);
if(isInRange(next_king)){ // 킹 움직였더니 일단 범위 안에는 있음
if(next_king[0]==rock[0] && next_king[1]==rock[1]){ // 킹 움직였더니 돌이랑 겹치면
char[] next_rock = move(cmd,rock);
if(isInRange(next_rock)){ // 움직인 돌도 범위 안에 있으면
king = next_king;
rock = next_rock;
}
else continue; // 돌이 범위 밖으로 나가면 이번 명령 무시
}
else{ // 킹 움직였더니 돌이랑 겹치진 않으면 킹만 움직이면 됨
king = next_king;
}
}
else continue; // 킹 움직였더니 범위 밖으로 나가면 명령 무시
}
bfw.write(String.valueOf(king[0]) + String.valueOf(king[1]) + "\n");
bfw.write(String.valueOf(rock[0]) + String.valueOf(rock[1]));
bfw.close();
}
static Boolean isInRange(char[] a){
if(a[0]<'A' || a[0]>'H' || a[1]<'1' || a[1]>'8') return false;
else return true;
}
static char[] move(String cmd, char[] target){
char[] result = target.clone();
switch(cmd){
case "R":
result[0]++;
break;
case "L":
result[0]--;
break;
case "B":
result[1]--;
break;
case "T":
result[1]++;
break;
case "RT":
result[0]++; result[1]++;
break;
case "LT":
result[0]--; result[1]++;
break;
case "RB":
result[0]++; result[1]--;
break;
case "LB":
result[0]--; result[1]--;
}
return result;
}
}