2022.02.05
문제 출처:
https://www.acmicpc.net/problem/1063
문제 분석:
킹과 돌맹이를 주어진 방향에 따라 움직이는 문제이다.
킹이 움직이는 방향에 돌맹이가 있으면 같이 밀린다.
필요한 요구사항에 따라 구현 하면 될듯 하다.
문제 해결:
처음에 주어진 좌표를 숫자좌표로 바꾸고
킹이 움직이는 방향을 돌맹이와의 상대좌표와 비교해서 같이 움직이는지 안움직이는지를 확인한다.
그리고 체스판 제한을 확인하며 움직여 준다.
내 소스코드:
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int INF = 987654321;
int arr[8][8];
pii dol;
pii king;
int dX[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int dY[8] = {1, 1, 0, -1, -1, -1, 0, 1};
int converter(string a)
{
if (a == "T")
return 0;
else if (a == "RT")
return 1;
else if (a == "R")
return 2;
else if (a == "RB")
return 3;
else if (a == "B")
return 4;
else if (a == "LB")
return 5;
else if (a == "L")
return 6;
else if (a == "LT")
return 7;
return 0;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
memset(arr, 0, sizeof(arr));
string a, b;
int c;
cin >> a >> b >> c;
king = make_pair((int)(a[0] - 'A'), (int)(a[1] - '0' - 1));
dol = make_pair((int)(b[0] - 'A'), (int)(b[1] - '0' - 1));
while (c--)
{
bool check = false;
cin >> a;
int order = converter(a);
int qX = dX[order];
int qY = dY[order];
// cout << qX << qY << "\n";
if (dol.F - king.F == qX && dol.S - king.S == qY)
check = true;
if (check)
{
int nX = king.F + qX;
int nY = king.S + qY;
int dolX = dol.F + qX;
int dolY = dol.S + qY;
if (nX < 0 || nY < 0 || nX >= 8 || nY >= 8)
continue;
if (dolX < 0 || dolY < 0 || dolX >= 8 || dolY >= 8)
continue;
king = {nX, nY};
dol = {dolX, dolY};
}
else
{
int nX = king.F + qX;
int nY = king.S + qY;
if (nX < 0 || nY < 0 || nX >= 8 || nY >= 8)
continue;
king = {nX, nY};
}
// cout << c << "\n"
// << (char)(king.F + 'A') << king.S << "\n"
// << (char)(dol.F + 'A') << dol.S << "\n";
}
cout << (char)(king.F + 'A') << king.S + 1 << "\n"
<< (char)(dol.F + 'A') << dol.S + 1;
return 0;
}
고찰:
잘 구현해냈다.
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
Codeforces Round #790 (Div. 4) - A (0) | 2022.05.15 |
---|---|
21922번: 학부 연구생 민상 (0) | 2022.02.14 |
10164번: 격자상의 경로 (0) | 2022.02.03 |
2539번: 모자이크 (0) | 2022.01.24 |
2437번: 저울 (0) | 2022.01.23 |