[BOJ/C++] 1063 킹

Hanbi·2022년 4월 26일
0

Problem Solving

목록 보기
15/108
post-thumbnail

문제

https://www.acmicpc.net/problem/1063

풀이

  • 이동할 수 있는 8개의 위치를 배열에 저장하는 게 핵심!
    string p[8] = { "R","L","B","T","RT","LT","RB","LB" };
    int dx[8] = {1,-1,0,0,1,-1,1,-1};
    int dy[8] = {0,0,-1,1,1,1,-1,-1};

  • 아스키코드 이용해서 문자 ↔️ 숫자 변환하는 거 기억하기

코드

#include <iostream>
#include <string>

using namespace std;

int main() {
	string p[8] = { "R","L","B","T","RT","LT","RB","LB" };
	int dx[8] = {1,-1,0,0,1,-1,1,-1};
	int dy[8] = {0,0,-1,1,1,1,-1,-1};
	string k, s, pos;
	int kx, ky, sx, sy;
	int n;
	
	cin >> k >> s >> n;
	kx = k[0] - 'A' + 1;
	ky = k[1] - '0';
	sx = s[0] - 'A' + 1;
	sy = s[1] - '0';

	while (n--) {
		cin >> pos;
		
		for (int i = 0; i < 8; i++) {
			if (pos == p[i]) {
				int mx = kx + dx[i];
				int my = ky + dy[i];
				if (mx < 1 || my < 1 || mx > 8 || my > 8) break; //킹이 밖으로 나가는지 확인
				if (mx == sx && my == sy) { //킹이 돌이랑 같은 위치인지 확인
					int mmx = sx + dx[i];
					int mmy = sy + dy[i];
					if (mmx < 1 || mmy < 1 || mmx > 8 || mmy > 8) break; //돌이 밖으로 나가는지 확인
					sx += dx[i]; //돌 이동
					sy += dy[i]; //돌 이동
				}
				kx += dx[i]; //킹 이동
				ky += dy[i]; //킹 이동
			}
		}
	}
	cout << (char)(kx + 'A' - 1) << ky << "\n";
	cout << (char)(sx + 'A' - 1) << sy << "\n";
	
	return 0;
}
profile
👩🏻‍💻

0개의 댓글