문제풀이/백준oj

[백준oj] 1063번 킹

Hyeon-Uk 2020. 11. 11. 23:52
반응형

www.acmicpc.net/problem/1063

 

1063번: 킹

8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는

www.acmicpc.net


 

주어진 조건들을 하나하나 차근차근 따져가며 조건문을 통해 move함수를 만들었습니다.

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;

int arr[8][8] = { 0 };
int ki, kj;
int si, sj;
void move(string str) {
	if (str == "R") {
		if (kj + 1 >= 8) {
			return;
		}
		if (ki == si && kj + 1 == sj) {
			if (sj + 1 >= 8) {
				return;
			}
			else {
				sj++;
			}
		}
		kj++;
	}
	else if (str == "L") {
		if (kj - 1 < 0) {
			return;
		}
		if (ki == si && kj - 1 == sj) {
			if (sj - 1 < 0) {
				return;
			}
			else {
				sj--;
			}
		}
		kj--;
	}
	else if (str == "T") {
		if (ki - 1 < 0) {
			return;
		}
		if (kj == sj && ki - 1 == si) {
			if (si - 1 < 0) {
				return;
			}
			else {
				si--;
			}
		}
		ki--;
	}
	else if (str == "B") {
		if (ki + 1 >= 8) {
			return;
		}
		if (kj == sj && ki + 1 == si) {
			if (si + 1 >= 8) {
				return;
			}
			else {
				si++;
			}
		}
		ki++;
	}
	else if (str == "RT") {
		if (ki - 1 < 0 || kj + 1 >= 8) {
			return;
		}
		if (kj + 1 == sj && ki - 1 == si) {
			if (sj + 1 >= 8 || si - 1 < 0) {
				return;
			}
			else {
				sj++;
				si--;
			}
		}
		ki--;
		kj++;
	}
	else if (str == "LT") {
		if (ki - 1 < 0 || kj - 1 < 0) {
			return;
		}
		if (ki - 1 == si && kj - 1 == sj) {
			if (sj - 1 < 0 || si - 1 < 0) {
				return;
			}
			else {
				si--;
				sj--;
			}
		}
		ki--;
		kj--;
	}
	else if (str == "RB") {
		if (ki + 1 >= 8 || kj + 1 >= 8) {
			return;
		}
		if (ki + 1 == si && kj + 1 == sj) {
			if (si + 1 >= 8 || sj + 1 >= 8) {
				return;
			}
			else {
				si++;
				sj++;
			}
		}
		ki++;
		kj++;
	}
	else {
		if (ki + 1 >= 8 || kj - 1 < 0) {
			return;
		}
		if (ki + 1 == si && kj - 1 == sj) {
			if (si + 1 >= 8 || sj - 1 < 0) {
				return;
			}
			else {
				si++;
				sj--;
			}
		}
		ki++;
		kj--;
	}
}

int main() {
	string king, stone;
	int n;
	cin >> king >> stone>>n;
	//KING = 1 , STONE = 2
	ki = 8 - (king.at(1) - '0');
	kj = king.at(0) - 'A';
	arr[ki][kj] = 1;
	si = 8 - (stone.at(1) - '0');
	sj = stone.at(0) - 'A';
	arr[si][sj] = 2;
	for (int i = 0; i < n; i++) {
		string op;
		cin >> op;
		move(op);
	}
	cout << (char)('A'+kj) << 8 - ki << "\n" << (char)('A'+sj) << 8 - si << "\n";
}
반응형