Coding Test
<C/C++> BOJ 3190: ๋ฑ
Deviloper๐
2022. 5. 2. 11:44
https://www.acmicpc.net/problem/3190
3190๋ฒ: ๋ฑ
'Dummy' ๋ผ๋ ๋์ค๊ฒ์์ด ์๋ค. ์ด ๊ฒ์์๋ ๋ฑ์ด ๋์์ ๊ธฐ์ด๋ค๋๋๋ฐ, ์ฌ๊ณผ๋ฅผ ๋จน์ผ๋ฉด ๋ฑ ๊ธธ์ด๊ฐ ๋์ด๋๋ค. ๋ฑ์ด ์ด๋ฆฌ์ ๋ฆฌ ๊ธฐ์ด๋ค๋๋ค๊ฐ ๋ฒฝ ๋๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค. ๊ฒ์
www.acmicpc.net
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
#define MAXN (100)
#define MAXK (100)
#define MAXL (100)
#define MAXX ((int)1e4)
int N;//์ง๋ ํฌ๊ธฐ
int K;//๊ณผ์ผ ๊ฐ์
int R[MAXK + 10];
int C[MAXK + 10];
int L;//๊ฒฝ๋ก๊ฐ์
int X[MAXL + 10];
char CMD[MAXL + 10];
int map[MAXN + 10][MAXN + 10];
int cmd[MAXX + 10];
struct QUE {
int r, c;
};
queue <QUE> que;
int Solve(void) {
memset(map, 0, sizeof(map));
memset(cmd, 0, sizeof(cmd));
que = {};//ํ ์ด๊ธฐํ
//1.๊ณผ์ผํ์
for (int i = 0; i < K; i++) {
map[R[i]][C[i]] = 1;
}
//2.๋ช
๋ น๋ ํ์
for (int i = 0; i < L; i++) {
cmd[X[i]] = (CMD[i] == 'D') ? 1 : -1;
}
//3.์๋ฎฌ๋ ์ด์
static int dr[] = { 0, 1, 0, -1 };
static int dc[] = { 1, 0, -1, 0 };
int hr = 1, hc = 1, dir = 0;
que.push({ hr, hc });
for (int t = 0;; t++) {
dir = (dir + cmd[t] + 4) % 4;//t์ดํ ๋ฐฉํฅ ๊ณ์ฐ
hr += dr[dir];//t์ด ํ์ ์ด๋ํ ์ธ๋ก ์์น
hc += dc[dir];//t์ด ํ์ ์ด๋ํ ๊ฐ๋ก ์์น
if ((hr < 1) || (hr > N) || (hc < 1) || (hc > N)) return t + 1;//๋ฒฝ์ ๋ถ๋ชํ์ ๊ฒ์ ์ข
๋ฃ
if (map[hr][hc] == 2) return t + 1;//์๊ธฐ์์ ๊ณผ ๋ถ๋ชํ์ ์ข
๋ฃ
if (map[hr][hc] == 0) {//์ด๋ํ ๊ณณ์ ๊ณผ์ผ์ด ์์ผ๋ฉด ๊ผฌ๋ฆฌ ์ ๊ฑฐ
QUE tail = que.front(); que.pop();
map[tail.r][tail.c] = 0;
}
que.push({ hr, hc });
map[hr][hc] = 2;
}
}
void InputData(void) {
cin >> N >> K;
for (int i = 0; i < K; i++) {
cin >> R[i] >> C[i];
}
cin >> L;
for (int i = 0; i < L; i++) {
cin >> X[i] >> CMD[i];
}
}
int main(void) {
InputData();
int ans = Solve();
cout << ans << endl;
return 0;
}