Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ㅣ풀이
- 백준 2447
- 해시 구현
- 게리멘더링2
- 백준 17471
- 해시구현
- 백준 1158
- 백준 17779
- Stack 이란
- 백준 17822
- AVL 시간 복잡도
- C/C++ 구현
- 스택의 특징
- 조세퍼스 순열
- 5397
- 자료구조
- 별 찍기 10
- 시간 복잡도
- 버킷 정렬
- 1764
- dfs
- heap
- 원판 돌리기
- 백준 5397
- 풀이
- 백준 1406
- 백준
- c#
- 구현
- qorwns
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 1063] 킹 본문
분류 : 시뮬레이션
요구사항
돌과 킹의 마지막 위치 구하기
풀이
1. 킹을 움직인다
2. 킹 자리에 돌이 있는지 확인한다
3. 돌도 킹과 같은 방향으로 움직여 준다
4. 범위 확인한다
5. 위치를 조정한다
돌이 없을 경우는 킹 움직이고, 범위 체크하고 킹 위치 조정한다
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include<string.h>
#include <string>
using namespace std;
int map[10][10];
string king;
string rock;
int kr, kc;
int rr, rc;
int n;
int dr[10] = { -1,-1,-1,0,1,1,1,0 };
int dc[10] = { -1,0,1,1,1,0,-1,-1 };
int change_Alpha(char ch) {
if (ch == 'A') return 1;
if (ch == 'B') return 2;
if (ch == 'C') return 3;
if (ch == 'D') return 4;
if (ch == 'E') return 5;
if (ch == 'F') return 6;
if (ch == 'G') return 7;
if (ch == 'H') return 8;
}
char get_Alpha(int ch) {
if (ch == 1) return 'A';
if (ch == 2) return 'B';
if (ch == 3) return 'C';
if (ch == 4) return 'D';
if (ch == 5) return 'E';
if (ch == 6) return 'F';
if (ch == 7) return 'G';
if (ch == 8) return 'H';
}
char get_Num(int ch) {
if (ch == 1)return '8';
if (ch == 2)return '7';
if (ch == 3)return '6';
if (ch == 4)return '5';
if (ch == 5)return '4';
if (ch == 6)return '3';
if (ch == 7)return '2';
if (ch == 8)return '1';
}
int change_Num(char ch) {
if (ch == '1') return 8;
if (ch == '2') return 7;
if (ch == '3') return 6;
if (ch == '4') return 5;
if (ch == '5') return 4;
if (ch == '6') return 3;
if (ch == '7') return 2;
if (ch == '8') return 1;
}
int main() {
cin >> king >> rock >> n;
kr = change_Num(king[1]);
kc = change_Alpha(king[0]);
rr = change_Num(rock[1]);
rc = change_Alpha(rock[0]);
for (int i = 0; i < n; i++) {
//cout << kr << " " << kc << " " << rr << " " << rc << endl;
string str;
cin >> str;
if (str == "B") {
int nkr = kr + dr[5];
int nkc = kc + dc[5];
//int nrr = rr + dr[5];
//int nrc = rc + dc[5];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[5];
int nrc = rc + dc[5];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "R") {
int nkr = kr + dr[3];
int nkc = kc + dc[3];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[3];
int nrc = rc + dc[3];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "T") {
int nkr = kr + dr[1];
int nkc = kc + dc[1];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[1];
int nrc = rc + dc[1];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "L") {
int nkr = kr + dr[7];
int nkc = kc + dc[7];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[7];
int nrc = rc + dc[7];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "LT") {
int nkr = kr + dr[0];
int nkc = kc + dc[0];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[0];
int nrc = rc + dc[0];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "RT") {
int nkr = kr + dr[2];
int nkc = kc + dc[2];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[2];
int nrc = rc + dc[2];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "RB") {
int nkr = kr + dr[4];
int nkc = kc + dc[4];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[4];
int nrc = rc + dc[4];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
if (str == "LB") {
int nkr = kr + dr[6];
int nkc = kc + dc[6];
int flag = 0;
if (nkr == rr && nkc == rc) {
flag = 1;
int nrr = rr + dr[6];
int nrc = rc + dc[6];
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8 || nrr < 1 || nrc < 1 || nrr>8 || nrc>8) continue;
kr = nkr;
kc = nkc;
rr = nrr;
rc = nrc;
continue;
}
if (nkr < 1 || nkc < 1 || nkr>8 || nkc>8) continue;
kr = nkr;
kc = nkc;
}
// cout << "next" << endl;
// cout << kr << " " << kc << " " << rr << " " << rc << endl;
}
string ans1;
string ans2;
ans1 += get_Alpha(kc);
ans1 += get_Num(kr);
ans2 += get_Alpha(rc);
ans2 += get_Num(rr);
cout << ans1 << endl;
cout << ans2 << endl;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 2230] 수 고르기 (0) | 2020.03.30 |
---|---|
[백준 2012] 등수 매기기 (0) | 2020.03.30 |
[백준 11812] K진 트리 (0) | 2020.03.30 |
[백준 1726] 로봇 (0) | 2020.03.29 |
[백준 6087] 레이저 통신 (0) | 2020.03.28 |
Comments