BOJ 1063. ํน
๐โโ๏ธ[Silver III] ํน - 1063
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 2032 KB, ์๊ฐ: 0 ms
๋ถ๋ฅ
๊ตฌํ, ์๋ฎฌ๋ ์ด์
์ ์ถ ์ผ์
2024๋ 2์ 28์ผ 21:25:33
๋ฌธ์ ์ค๋ช
8*8ํฌ๊ธฐ์ ์ฒด์คํ์ ์์ด ํ๋ ์๋ค. ํน์ ํ์ฌ ์์น๊ฐ ์ฃผ์ด์ง๋ค. ์ฒด์คํ์์ ๋ง์ ์์น๋ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง๋ค. ์ํ๋ฒณ ํ๋์ ์ซ์ ํ๋๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, ์ํ๋ฒณ์ ์ด์ ์์งํ๊ณ , ์ซ์๋ ํ์ ์์งํ๋ค. ์ด์ ๊ฐ์ฅ ์ผ์ชฝ ์ด์ด A์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ด์ด H๊น์ง ์ด๊ณ , ํ์ ๊ฐ์ฅ ์๋๊ฐ 1์ด๊ณ ๊ฐ์ฅ ์๊ฐ 8์ด๋ค. ์๋ฅผ ๋ค์ด, ์ผ์ชฝ ์๋ ์ฝ๋๋ A1์ด๊ณ , ๊ทธ ์ค๋ฅธ์ชฝ ์นธ์ B1์ด๋ค.
ํน์ ๋ค์๊ณผ ๊ฐ์ด ์์ง์ผ ์ ์๋ค.
- R : ํ ์นธ ์ค๋ฅธ์ชฝ์ผ๋ก
- L : ํ ์นธ ์ผ์ชฝ์ผ๋ก
- B : ํ ์นธ ์๋๋ก
- T : ํ ์นธ ์๋ก
- RT : ์ค๋ฅธ์ชฝ ์ ๋๊ฐ์ ์ผ๋ก
- LT : ์ผ์ชฝ ์ ๋๊ฐ์ ์ผ๋ก
- RB : ์ค๋ฅธ์ชฝ ์๋ ๋๊ฐ์ ์ผ๋ก
- LB : ์ผ์ชฝ ์๋ ๋๊ฐ์ ์ผ๋ก
์ฒด์คํ์๋ ๋์ด ํ๋ ์๋๋ฐ, ๋๊ณผ ๊ฐ์ ๊ณณ์ผ๋ก ์ด๋ํ ๋๋, ๋์ ํน์ด ์์ง์ธ ๋ฐฉํฅ๊ณผ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ด๋์ํจ๋ค. ์๋ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ์.
์ ๋ ฅ์ผ๋ก ํน์ด ์ด๋ป๊ฒ ์์ง์ฌ์ผ ํ๋์ง ์ฃผ์ด์ง๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋๋ก ์์ง์ฌ์ ํน์ด๋ ๋์ด ์ฒด์คํ ๋ฐ์ผ๋ก ๋๊ฐ ๊ฒฝ์ฐ์๋ ๊ทธ ์ด๋์ ๊ฑด๋ ๋ฐ๊ณ ๋ค์ ์ด๋์ ํ๋ค.
ํน๊ณผ ๋์ ๋ง์ง๋ง ์์น๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํน์ ์์น, ๋์ ์์น, ์์ง์ด๋ ํ์ N์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ํน์ด ์ด๋ป๊ฒ ์์ง์ฌ์ผ ํ๋์ง ์ฃผ์ด์ง๋ค. N์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๊ณ , ์์ง์ด๋ ์ ๋ณด๋ ์์ ์ฐ์ฌ ์๋ 8๊ฐ์ง ์ค ํ๋์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํน์ ๋ง์ง๋ง ์์น, ๋์งธ ์ค์ ๋์ ๋ง์ง๋ง ์์น๋ฅผ ์ถ๋ ฅํ๋ค.
๐ํ์ด
map์ ์ด์ฉํด์ ์
๋ ฅ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋ก ๋๊ฒจ์ค์ ํ์๋ค.
์ธ๋ฑ์ค๋ dy, dx์ ์ธ๋ฑ์ค์ธ๋ฐ ์
๋ ฅ๊ฐ๊ณผ ๋์ผํ ์์๋ก ๋ง๋ค์๋ค.
ํ์ ๊ฒฝ์ฐ ๋ฐ์์๋ถํฐ 1~8 ์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ์ ๋ณํ๋ฅผ ์ฃผ์๋ค.
์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ ์ฌ์.
/*
R : ํ ์นธ ์ค๋ฅธ์ชฝ์ผ๋ก
L : ํ ์นธ ์ผ์ชฝ์ผ๋ก
B : ํ ์นธ ์๋๋ก
T : ํ ์นธ ์๋ก
RT : ์ค๋ฅธ์ชฝ ์ ๋๊ฐ์ ์ผ๋ก
LT : ์ผ์ชฝ ์ ๋๊ฐ์ ์ผ๋ก
RB : ์ค๋ฅธ์ชฝ ์๋ ๋๊ฐ์ ์ผ๋ก
LB : ์ผ์ชฝ ์๋ ๋๊ฐ์ ์ผ๋ก
*/
// ์์ ์์๋๋ก ๋ง๋ฆ.
int n;
int board[10][10];
int dy[] = { 0, 0, 1, -1, -1, -1, 1, 1 };
int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };
map<string, int> m =
{
{"R", 0},
{"L", 1},
{"B", 2},
{"T", 3},
{"RT", 4},
{"LT", 5},
{"RB", 6},
{"LB", 7},
};
void solve()
{
string kingPos, piecePos;
pair<int, int> king, piece;
cin >> kingPos >> piecePos >> n;
int y = abs(8 - (kingPos[1] - '1' + 1)) + 1;
int x = kingPos[0] - 'A' + 1;
king = { y , x };
y = abs(8 - (piecePos[1] - '1' + 1)) + 1;
x = piecePos[0] - 'A' + 1;
piece = { y , x };
// n๋ฒ ์ด๋
string moveStr;
for (int i = 0; i < n; ++i)
{
cin >> moveStr;
int ny = king.first + dy[m[moveStr]];
int nx = king.second + dx[m[moveStr]];
if (ny < 1 || nx < 1 || ny > 8 || nx > 8)
continue;
if (ny == piece. first && nx == piece.second)
{
int pny = piece.first + dy[m[moveStr]];
int pnx = piece.second + dx[m[moveStr]];
if (pny < 1 || pnx < 1 || pny > 8 || pnx > 8)
continue;
piece.first = pny;
piece.second = pnx;
}
king.first = ny;
king.second = nx;
}
// ๋ง์ง๋ง ์์น ์ถ๋ ฅ
char kingY = abs('8' - king.first) + 1;
char kingX = king.second + 'A' - 1;
cout << kingX << kingY << '\n';
char pieceY = abs('8' - piece.first) + 1;
char pieceX = piece.second + 'A' - 1;
cout << pieceX << pieceY << '\n';
}
์ค๋๋ง์ ์ค๋ฒ๋ฌธ์ ๋ฅผ ํธ๋ ์ด๊ฑฐ๊ฐ๋ค..
๊ทผ๋ฐ ๊ทธ๋๋ ์ค3๋ฌธ์ ๋ฐ ๋ ์ดํ ์ ํ๋๋ ์์ฃผ๋๊ฑด ๋๋ฌดํ๋ฐ.. ใ
๐์ ์ฒด ์ฝ๋
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <map>
using namespace std;
/*
R : ํ ์นธ ์ค๋ฅธ์ชฝ์ผ๋ก
L : ํ ์นธ ์ผ์ชฝ์ผ๋ก
B : ํ ์นธ ์๋๋ก
T : ํ ์นธ ์๋ก
RT : ์ค๋ฅธ์ชฝ ์ ๋๊ฐ์ ์ผ๋ก
LT : ์ผ์ชฝ ์ ๋๊ฐ์ ์ผ๋ก
RB : ์ค๋ฅธ์ชฝ ์๋ ๋๊ฐ์ ์ผ๋ก
LB : ์ผ์ชฝ ์๋ ๋๊ฐ์ ์ผ๋ก
*/
// ์์ ์์๋๋ก ๋ง๋ฆ.
int n;
int board[10][10];
int dy[] = { 0, 0, 1, -1, -1, -1, 1, 1 };
int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };
map<string, int> m =
{
{"R", 0},
{"L", 1},
{"B", 2},
{"T", 3},
{"RT", 4},
{"LT", 5},
{"RB", 6},
{"LB", 7},
};
void solve()
{
string kingPos, piecePos;
pair<int, int> king, piece;
cin >> kingPos >> piecePos >> n;
int y = abs(8 - (kingPos[1] - '1' + 1)) + 1;
int x = kingPos[0] - 'A' + 1;
king = { y , x };
y = abs(8 - (piecePos[1] - '1' + 1)) + 1;
x = piecePos[0] - 'A' + 1;
piece = { y , x };
// n๋ฒ ์ด๋
string moveStr;
for (int i = 0; i < n; ++i)
{
cin >> moveStr;
int ny = king.first + dy[m[moveStr]];
int nx = king.second + dx[m[moveStr]];
if (ny < 1 || nx < 1 || ny > 8 || nx > 8)
continue;
if (ny == piece. first && nx == piece.second)
{
int pny = piece.first + dy[m[moveStr]];
int pnx = piece.second + dx[m[moveStr]];
if (pny < 1 || pnx < 1 || pny > 8 || pnx > 8)
continue;
piece.first = pny;
piece.second = pnx;
}
king.first = ny;
king.second = nx;
}
// ๋ง์ง๋ง ์์น ์ถ๋ ฅ
char kingY = abs('8' - king.first) + 1;
char kingX = king.second + 'A' - 1;
cout << kingX << kingY << '\n';
char pieceY = abs('8' - piece.first) + 1;
char pieceX = piece.second + 'A' - 1;
cout << pieceX << pieceY << '\n';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
freopen("input.txt", "rt", stdin);
solve();
return 0;
}