홍시홍 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;
}