BOJ 1063 : 킹 - C++
킹
코드
#include <cstdio>
#include <vector>
#include <queue>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <set>
#include <deque>
#include <numeric>
#include <map>
#define ll long long
using namespace std;
int N,ans;
int board[20][20];
pair<int,int> king;
pair<int,int> stone;
int dc[8] = {1, -1, 0, 0, 1, -1 ,1, -1};
int dr[8] = {0, 0, 1, -1, -1, -1, 1, 1};
int changeDir(string s)
{
int dir;
if(s == "R") dir = 0;
else if(s == "L") dir = 1;
else if(s == "B") dir = 2;
else if(s == "T") dir = 3;
else if(s == "RT") dir = 4;
else if(s == "LT") dir = 5;
else if(s == "RB") dir = 6;
else if(s == "LB") dir = 7;
return dir;
}
int changePosInt(char c)
{
if(c == 'A') return 1;
else if(c == 'B') return 2;
else if(c == 'C') return 3;
else if(c == 'D') return 4;
else if(c == 'E') return 5;
else if(c == 'F') return 6;
else if(c == 'G') return 7;
return 8;
}
string changePosChar(int n){
if(n == 1) return "A";
else if(n == 2) return "B";
else if(n == 3) return "C";
else if(n == 4) return "D";
else if(n == 5) return "E";
else if(n == 6) return "F";
else if(n == 7) return "G";
return "H";
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string sk, ss;
cin >> sk >> ss >> N;
/* 1과 8의 방향을 바꿔줘야함 */
king = {9-(sk[1]-'0'), changePosInt(sk[0])};
stone = {9-(ss[1]-'0'), changePosInt(ss[0])};
for(int i=0;i<N;i++)
{
string c;
cin >> c;
int dir = changeDir(c);
int k_nr = king.first + dr[dir];
int k_nc = king.second + dc[dir];
if(k_nr<1 or k_nc<1 or k_nr>8 or k_nc>8) continue;
if(k_nr == stone.first and k_nc == stone.second){
int s_nr = stone.first + dr[dir];
int s_nc = stone.second + dc[dir];
if(s_nr<1 or s_nc<1 or s_nr>8 or s_nc>8) continue;
stone = {s_nr, s_nc};
}
king = {k_nr, k_nc};
}
/* 1과 8의 방향을 바꿔줘야함 */
sk = changePosChar(king.second) + to_string(9-king.first);
ss = changePosChar(stone.second) + to_string(9-stone.first);
cout << sk << '\n' << ss;
return 0;
}
- 주의
행의 방향
이 8
과 1
이 보통 풀던 방향
과 다르다는 것
을 인지
해야한다
느낀 점
문제를 꼼꼼하게 읽고 확인
하자
Author And Source
이 문제에 관하여(BOJ 1063 : 킹 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/BOJ-1063-킹-C
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <cstdio> #include <vector> #include <queue> #include <iostream> #include <cmath> #include <algorithm> #include <set> #include <deque> #include <numeric> #include <map> #define ll long long using namespace std; int N,ans; int board[20][20]; pair<int,int> king; pair<int,int> stone; int dc[8] = {1, -1, 0, 0, 1, -1 ,1, -1}; int dr[8] = {0, 0, 1, -1, -1, -1, 1, 1}; int changeDir(string s) { int dir; if(s == "R") dir = 0; else if(s == "L") dir = 1; else if(s == "B") dir = 2; else if(s == "T") dir = 3; else if(s == "RT") dir = 4; else if(s == "LT") dir = 5; else if(s == "RB") dir = 6; else if(s == "LB") dir = 7; return dir; } int changePosInt(char c) { if(c == 'A') return 1; else if(c == 'B') return 2; else if(c == 'C') return 3; else if(c == 'D') return 4; else if(c == 'E') return 5; else if(c == 'F') return 6; else if(c == 'G') return 7; return 8; } string changePosChar(int n){ if(n == 1) return "A"; else if(n == 2) return "B"; else if(n == 3) return "C"; else if(n == 4) return "D"; else if(n == 5) return "E"; else if(n == 6) return "F"; else if(n == 7) return "G"; return "H"; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); string sk, ss; cin >> sk >> ss >> N; /* 1과 8의 방향을 바꿔줘야함 */ king = {9-(sk[1]-'0'), changePosInt(sk[0])}; stone = {9-(ss[1]-'0'), changePosInt(ss[0])}; for(int i=0;i<N;i++) { string c; cin >> c; int dir = changeDir(c); int k_nr = king.first + dr[dir]; int k_nc = king.second + dc[dir]; if(k_nr<1 or k_nc<1 or k_nr>8 or k_nc>8) continue; if(k_nr == stone.first and k_nc == stone.second){ int s_nr = stone.first + dr[dir]; int s_nc = stone.second + dc[dir]; if(s_nr<1 or s_nc<1 or s_nr>8 or s_nc>8) continue; stone = {s_nr, s_nc}; } king = {k_nr, k_nc}; } /* 1과 8의 방향을 바꿔줘야함 */ sk = changePosChar(king.second) + to_string(9-king.first); ss = changePosChar(stone.second) + to_string(9-stone.first); cout << sk << '\n' << ss; return 0; }
- 주의
행의 방향
이8
과1
이보통 풀던 방향
과다르다는 것
을인지
해야한다
느낀 점
문제를 꼼꼼하게 읽고 확인
하자
Author And Source
이 문제에 관하여(BOJ 1063 : 킹 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/BOJ-1063-킹-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)