본문 바로가기

알고리즘/BOJ

1063번

1063번 - 킹


간단한 시뮬레이션 문제인데, 평상시에 사용하던 맵이랑은 뒤바뀌어 있다.


그래도 그냥 맨 왼쪽 아래를 0,0 으로 놓고 생각해서 문제를 풀었다.


평상시랑 dx 배열의 값이 반대가 되어야 한다.


<정답 코드>


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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include<iostream>
#include<string>
using namespace std;
int dx[8= { 0,0,-1,1,1,1,-1,-1 };
int dy[8= { 1,-1,0,0,1,-1,1,-1 };
int map[8][8];
int main()
{
    //freopen("input.txt", "r", stdin);
    int n;
    char x1,y1, x2, y2;
    int kx, ky, sx, sy;
    cin >> x1 >> y1 >> x2 >> y2 >> n;
 
    ky = x1 - 'A', kx = y1 - '1', sy = x2 - 'A', sx = y2 - '1';
 
    for (int i = 0; i < n; i++)
    {
        string move;
        int d;
        cin >> move;
        int len = move.size();
        
        if (len == 1)
        {
            if (move[0== 'R')
            {
                d = 0;
            }
            else if (move[0== 'L')
            {
                d = 1;
            }
            else if (move[0== 'B')
            {
                d = 2;
            }
            else if (move[0== 'T')
            {
                d = 3;
            }
 
            int nkx = kx + dx[d];
            int nky = ky + dy[d];
            int nsx = sx + dx[d];
            int nsy = sy + dy[d];
 
            if (nkx == sx && nky == sy)
            {
                if (nkx >= 0 && nky >= 0 && nkx < 8 && nky < 8 && nsx>=0 && nsy>=0 && nsx<8 && nsy<8)
                {
                    kx = nkx, ky = nky, sx = nsx, sy = nsy;
                }
            }
            else
            {
                if (nkx >= 0 && nky >= 0 && nkx < 8 && nky < 8)
                {
                    kx = nkx, ky = nky;
                }
            }
 
        }
        else
        {
            if (move[0== 'R')
            {
                if (move[1== 'B')
                {
                    d = 6;
                }
                else if (move[1== 'T')
                {
                    d = 4;
                }
            }
            else if (move[0== 'L')
            {
                if (move[1== 'B')
                {
                    d = 7;
                }
                else if (move[1== 'T')
                {
                    d = 5;
                }
            }
 
            int nkx = kx + dx[d];
            int nky = ky + dy[d];
            int nsx = sx + dx[d];
            int nsy = sy + dy[d];
 
            if (nkx == sx && nky == sy)
            {
                if (nkx >= 0 && nky >= 0 && nkx < 8 && nky < 8 && nsx >= 0 && nsy >= 0 && nsx<8 && nsy<8)
                {
                    kx = nkx, ky = nky, sx = nsx, sy = nsy;
                }
            }
            else
            {
                if (nkx >= 0 && nky >= 0 && nkx < 8 && nky < 8)
                {
                    kx = nkx, ky = nky;
                }
            }
        }
    }
 
    cout << (char)(ky + 'A'<< (char)(kx + '1'<< "\n";
    cout << (char)(sy + 'A'<< (char)(sx + '1'<< "\n";
 
 
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

15686번  (0) 2018.06.14
1799번  (4) 2018.04.13
11559  (0) 2018.04.11
1793번  (0) 2018.03.25
15559번  (0) 2018.03.25