알고리즘 문제풀이/백준
[백준 1063] 킹
홍시홍
2020. 3. 30. 01:48
분류 : 시뮬레이션
요구사항
돌과 킹의 마지막 위치 구하기
풀이
1. 킹을 움직인다
2. 킹 자리에 돌이 있는지 확인한다
3. 돌도 킹과 같은 방향으로 움직여 준다
4. 범위 확인한다
5. 위치를 조정한다
돌이 없을 경우는 킹 움직이고, 범위 체크하고 킹 위치 조정한다
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include<string.h>
#include <string>
using namespace std;
int map[10][10];
string king;
string rock;
int kr, kc;
int rr, rc;
int n;
int dr[10] = { -1,-1,-1,0,1,1,1,0 };
int dc[10] = { -1,0,1,1,1,0,-1,-1 };
int change_Alpha(char ch) {
if (ch == 'A') return 1;
if (ch == 'B') return 2;
if (ch == 'C') return 3;
if (ch == 'D') return 4;
if (ch == 'E') return 5;
if (ch == 'F') return 6;
if (ch == 'G') return 7;
if (ch == 'H') return 8;
}
char get_Alpha(int ch) {
if (ch == 1) return 'A';
if (ch == 2) return 'B';
if (ch == 3) return 'C';
if (ch == 4) return 'D';
if (ch == 5) return 'E';
if (ch == 6) return 'F';
if (ch == 7) return 'G';
if (ch == 8) return 'H';
}
char get_Num(int ch) {
if (ch == 1)return '8';
if (ch == 2)return '7';
if (ch == 3)return '6';
if (ch == 4)return '5';
if (ch == 5)return '4';
if (ch == 6)return '3';
if (ch == 7)return '2';
if (ch == 8)return '1';
}
int change_Num(char ch) {
if (ch == '1') return 8;
if (ch == '2') return 7;
if (ch == '3') return 6;
if (ch == '4') return 5;
if (ch == '5') return 4;
if (ch == '6') return 3;
if (ch == '7') return 2;
if (ch == '8') return 1;
}
int main() {
cin >> king >> rock >> n;
kr = change_Num(king[1]);
kc = change_Alpha(king[0]);
rr = change_Num(rock[1]);
rc = change_Alpha(rock[0]);
for (int i = 0; i < n; i++) {
//cout << kr << " " << kc << " " << rr << " " << rc << endl;
string str;
cin >> str;
if (str == "B") {
int nkr = kr + dr[5];
int nkc = kc + dc[5];
//int nrr = rr + dr[5];
//int nrc = rc + dc[5];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[5];
int nrc = rc + dc[5];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "R") {
int nkr = kr + dr[3];
int nkc = kc + dc[3];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[3];
int nrc = rc + dc[3];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "T") {
int nkr = kr + dr[1];
int nkc = kc + dc[1];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[1];
int nrc = rc + dc[1];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "L") {
int nkr = kr + dr[7];
int nkc = kc + dc[7];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[7];
int nrc = rc + dc[7];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "LT") {
int nkr = kr + dr[0];
int nkc = kc + dc[0];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[0];
int nrc = rc + dc[0];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "RT") {
int nkr = kr + dr[2];
int nkc = kc + dc[2];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[2];
int nrc = rc + dc[2];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "RB") {
int nkr = kr + dr[4];
int nkc = kc + dc[4];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[4];
int nrc = rc + dc[4];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "LB") {
int nkr = kr + dr[6];
int nkc = kc + dc[6];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[6];
int nrc = rc + dc[6];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
// cout << "next" << endl;
// cout << kr << " " << kc << " " << rr << " " << rc << endl;
}
string ans1;
string ans2;
ans1 += get_Alpha(kc);
ans1 += get_Num(kr);
ans2 += get_Alpha(rc);
ans2 += get_Num(rr);
cout << ans1 << endl;
cout << ans2 << endl;
}