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] = { 0, 0, 1, -1, -1, -1, 1, 1 }; int dy[SIZE] = { 1, -1, 0, 0, 1, -1, 1, -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 |