반갑습니다!

[백준] 1063 킹 본문

알고리즘 문제 풀이

[백준] 1063 킹

김덜덜이 2020. 4. 22. 02:14
1063번: 킹
 
www.acmicpc.net

풀이

방향을 미리 map에 저장해두고 문제의 조건에 맞춰 구현하였다.
문제를 잘 읽는 습관을 기르자

코드

#include <iostream>
#include <map>
using namespace std;

bool inRange(char x, char y) {
    return ('A' <= x && x <= 'H') && ('1' <= y && y <= '8');
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    map<string, pair<int, int>> map = { {"R", {1, 0}}, {"L", {-1, 0}}, {"B", {0, -1}}, {"T", {0, 1}}, {"RT", {1, 1}}, {"LT", {-1, 1}}, {"RB", {1, -1}}, {"LB", {-1, -1}} };
    int n;
    string s1, s2;
    cin >> s1 >> s2 >> n;
    char kx = s1[0], ky = s1[1], sx = s2[0], sy = s2[1];

    for (int i = 0; i < n; i++) {
        string tmp;
        cin >> tmp;
        int x = map[tmp].first; int y = map[tmp].second;
        // 킹이 이동할 수 없는 경우
        if (!inRange(kx + x, ky + y)) continue;
        // 킹이 돌의 위치로 이동하는 경우
        if (kx + x == sx && ky + y == sy) {
            // 돌이 이동할 수 없는 경우
            if(!inRange(sx + x, sy + y)) continue;
            sx += x; sy += y;
        }
        kx += x; ky += y;
    }
    cout << kx << ky << '\n' << sx << sy << '\n';
    return 0;
}

'알고리즘 문제 풀이' 카테고리의 다른 글

[백준] 1600 말이 되고픈 원숭이  (0) 2020.04.22
[백준] 1726 로봇  (0) 2020.04.22
[SWEA] 1486 장훈이의 높은 선반  (0) 2020.04.21
[백준] 6588 골드바흐의 추측  (0) 2020.04.20
[백준] 15486 퇴사 2  (0) 2020.04.20