반응형
https://www.acmicpc.net/problem/1063
1063번: 킹
8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는
www.acmicpc.net
- 문제
체스판 위에 킹의 위치와 돌의 위치가 주어졌을 때 각종 이동 후에 킹과 돌의 위치를 출력하는 문제다.
- 해설
"A3"와 같은 위치가 주어지면 이걸 어떻게 C++언어의 배열로 변경해서 문제를 풀 것인지를 생각해야 하는 문제다.
상하좌우와 대각선까지 8방향을 dx,dy를 이용해서 접할수있고, check 함수를 만들어서 방향으로 이동한 킹과 돌이 체스판위에 있는지 확인하도록 하였다.
- 풀이
#include <iostream>
#include <string>
using namespace std;
int N, kingX, kingY, rockX, rockY;
int dx[8] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};
bool check(int dir)
{
int nKingX = kingX + dx[dir], nKingY = kingY + dy[dir]; // 왕의 위치 변경
int nRockX = rockX, nRockY = rockY;
if (nKingX < 1 || nKingX > 8 || nKingY < 1 || nKingY > 8) // 왕의 위치가 보드 밖으로 안나가는지 확인
{
return false;
}
if (nRockX == nKingX && nRockY == nKingY) // 돌의 위치가 왕의 이동 후 위치와 같으면
{
nRockX += dx[dir], nRockY += dy[dir];
if (nRockX < 1 || nRockX > 8 || nRockY < 1 || nRockY > 8)
{
return false;
}
}
kingX = nKingX, kingY = nKingY; // 최종적으로 왕이랑 돌의 위치 적용
rockX = nRockX, rockY = nRockY;
return true;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string kLocation, rLocation, answer = "";
cin >> kLocation >> rLocation >> N;
kingX = kLocation[0] - 'A' + 1, kingY = kLocation[1] - '1' + 1; // 왕이랑 돌의 위치 숫자로 변경
rockX = rLocation[0] - 'A' + 1, rockY = rLocation[1] - '1' + 1;
for (int i = 0; i < N; i++)
{
string tempS;
cin >> tempS;
if (tempS == "L") // 8방향에 맞는 check를 진행
{
if (!check(0))
{
continue;
}
}
else if (tempS == "LT")
{
if (!check(1))
{
continue;
}
}
else if (tempS == "T")
{
if (!check(2))
{
continue;
}
}
else if (tempS == "RT")
{
if (!check(3))
{
continue;
}
}
else if (tempS == "R")
{
if (!check(4))
{
continue;
}
}
else if (tempS == "RB")
{
if (!check(5))
{
continue;
}
}
else if (tempS == "B")
{
if (!check(6))
{
continue;
}
}
else if (tempS == "LB")
{
if (!check(7))
{
continue;
}
}
}
cout << (char)('A' - 1 + kingX) << kingY << '\n'; // 알파벳으로 변경 후 출력
cout << (char)('A' - 1 + rockX) << rockY << '\n';
return 0;
}
- 새롭게 알게 된 점
반응형
'Algorithm > Baekjoon BOJ' 카테고리의 다른 글
[백준][C++] 2629: 양팔저울 (0) | 2022.12.30 |
---|---|
[백준][C++] 1520: 내리막 길 (0) | 2022.12.30 |
[백준][C++] 2293: 동전 1 (1) | 2022.12.26 |
[백준][C++] 23757: 아이들과 선물 상자 (0) | 2022.12.13 |
[백준][C++] 11286: 절대값 힙 (0) | 2022.12.09 |