문제링크
https://www.acmicpc.net/problem/1063
풀이
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().split("\n");
const obj = {
A: 0,
B: 1,
C: 2,
D: 3,
E: 4,
F: 5,
G: 6,
H: 7,
0: "A",
1: "B",
2: "C",
3: "D",
4: "E",
5: "F",
6: "G",
7: "H",
};
const move = (r, c, direction) => {
switch (direction) {
case "R":
c = c + 1;
break;
case "L":
c = c - 1;
break;
case "B":
r = r + 1;
break;
case "T":
r = r - 1;
break;
case "RT":
c = c + 1;
r = r - 1;
break;
case "LT":
c = c - 1;
r = r - 1;
break;
case "RB":
c = c + 1;
r = r + 1;
break;
case "LB":
c = c - 1;
r = r + 1;
break;
}
return [r, c];
};
const [king, stone, n] = input[0].split(" ").map((item) => {
if (item.length >= 2) {
// [r,c]
let arr = [8 - Number(item[1]), obj[item[0]]];
return arr;
} else {
return Number(item);
}
});
for (let i = 1; i < input.length; ++i) {
let direction = input[i];
let [nr, nc] = move(king[0], king[1], direction);
// 장외
if (nr < 0 || nr > 7 || nc < 0 || nc > 7) {
continue;
}
// 장외가 아니고 다음 스텝이 돌과 같은 포지션이면
if (nr === stone[0] && nc === stone[1]) {
// 돌도 움직여 봄
let [nsr, nsc] = move(stone[0], stone[1], direction);
//장외면 아웃
if (nsr < 0 || nsr > 7 || nsc < 0 || nsc > 7) {
continue;
}
// 장외가 아니면
king[0] = nr;
king[1] = nc;
stone[0] = nsr;
stone[1] = nsc;
continue;
}
// 장외가 아니고 다음 스텝이 돌과 같은 포지션이 아니면
king[0] = nr;
king[1] = nc;
}
console.log(obj[king[1]] + (8 - king[0]));
console.log(obj[stone[1]] + (8 - stone[0]));
'알고리즘' 카테고리의 다른 글
백준[node.js] > 1141번 접두사 (0) | 2024.11.10 |
---|---|
백준[JS] > 1105번 팔 (0) | 2024.11.09 |
백준[JS] > 1449번 수리공 항승 (0) | 2024.11.04 |
백준[JS] > 11501번 주식 (2) | 2024.11.04 |
백준[JS] > 11000번 강의실 배정 (0) | 2024.11.04 |