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;
}