본문 바로가기

Problem/시뮬레이션

[C/C++] BOJ 1063 :: 킹

BOJ 1063 :: 킹



문제 링크 : https://www.acmicpc.net/problem/1063





풀이 방법




1. 입력된 방향으로 킹이 이동했을때 범위를 벗어나는지 확인한다.

2. 이동한 곳의 위치가 돌의 위치와 같은지 확인한다.

2-1. 같으면, 돌의 위치를 이동시켰을 때 범위를 벗어나는지 확인한다.

2-2. 돌의 위치를 갱신한다.

3. 킹의 위치를 갱신한다.




나의 코드



Github : https://github.com/j2wooooo/Daliy_Algorithms/blob/master/Daliy_Algorithms/BOJ_1063/BOJ_1063.cpp



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// 백준알고리즘 1063번 :: 킹
#include<iostream>
#include<string>
using namespace std;
#define SIZE 8
 
string king, stone;
int N;
// R, L, B, T, RT, LT, RB, LB
int dx[SIZE] = { 001-1-1-111 };
int dy[SIZE] = { 1-1001-11-1 };
 
int main(void)
{
    int kx, ky, sx, sy;
    string direction;
    cin >> king >> stone;
 
    for (int i = 0; i < 2; i++)
    {
        if (i == 0)
        {
            ky = king[i] - 'A';
            sy = stone[i] - 'A';
        }
        else
        {
            kx = '8' - king[i];
            sx = '8' - stone[i];
        }
    }
 
    cin >> N;
    int dir = 0;
 
    for (int i = 0; i < N; i++)
    {
        cin >> direction;
 
        if (!direction.compare("R")) dir = 0;
        else if (!direction.compare("L")) dir = 1;
        else if (!direction.compare("B")) dir = 2;
        else if (!direction.compare("T")) dir = 3;
        else if (!direction.compare("RT")) dir = 4;
        else if (!direction.compare("LT")) dir = 5;
        else if (!direction.compare("RB")) dir = 6;
        else if (!direction.compare("LB")) dir = 7;
 
        int kmx = kx + dx[dir];
        int kmy = ky + dy[dir];
 
        if (kmx < 0 || kmx >= SIZE || kmy < 0 || kmy >= SIZE) continue;
        if (kmx == sx && kmy == sy)
        {
            int smx = sx + dx[dir];
            int smy = sy + dy[dir];
            if (smx < 0 || smx >= SIZE || smy < 0 || smy >= SIZE) continue;
            sx = smx; sy = smy;
        }
        kx = kmx; ky = kmy;
    }
 
    cout << (char)(ky + 'A'<< SIZE - kx << '\n';
    cout << (char)(sy + 'A'<< SIZE - sx << '\n';
 
    return 0;
}
cs


'Problem > 시뮬레이션' 카테고리의 다른 글

[C/C++] BOJ 13901 :: 로봇  (0) 2019.02.07
[C/C++] BOJ 1986 :: 체스  (0) 2019.02.06
[C/C++] BOJ 1347 :: 미로 만들기  (0) 2019.01.21
[C/C++] BOJ 15685 :: 드래곤 커브  (0) 2019.01.21
[C/C++] BOJ 14890 :: 경사로  (0) 2019.01.11