본문 바로가기
백준/[삼성 기출]

[3190번] 뱀

by 2744m 2020. 4. 4.
3190번: 뱀
 
www.acmicpc.net

뱀이 사과를 먹으면 길이가 늘어나는 게임이다.

규칙은 아래와 같다.

  • 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다.
  • 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다.
  • 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
struct pnt { int r, c; };
int Map[101][101];
int visit[101][101];
int time_ = 0;
int N, k, L;
pnt dir[4= { {0,1},{1,0},{0,-1},{-1,0} };
queue<pair<intchar>>cmd;
queue<pnt>snake;
int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> N >> k;
    for (int i = 0; i < k; i++) {
        int r, c;
        cin >> r >> c;
        Map[r][c] = 1;
    }
    cin >> L;
    for (int i = 0; i < L; i++) {
        pair<intchar> tmp;
        cin >> tmp.first >> tmp.second;
        cmd.push(tmp);
    }
    int snake_dir = 0;
    snake.push({ 1,1 });
    visit[1][1= 1;
    while (1) {
        int nr = snake.back().r + dir[snake_dir].r;
        int nc = snake.back().c + dir[snake_dir].c;
        if (!(nr < 1 || nr>|| nc<1 || nc > N) && visit[nr][nc] == 0) {
            snake.push({ nr,nc });
            visit[nr][nc] = 1;
            if (Map[nr][nc] == 0) {
                visit[snake.front().r][snake.front().c] = 0;
                snake.pop();
            }
            Map[nr][nc] = 0;
            time_++;
        }
        else break;
        if (!cmd.empty() && cmd.front().first == time_) {
            if (cmd.front().second == 'D') {
                snake_dir = (snake_dir + 1) % 4;
            }
            else if (cmd.front().second == 'L') {
                snake_dir--;
                if (snake_dir < 0) {
                    snake_dir = 4 + snake_dir;
                }
            }
            cmd.pop();
        }
    }
    cout << time_ + 1;
    return 0;
}
 
cs


'백준 > [삼성 기출]' 카테고리의 다른 글

[17471번] 게리맨더링  (0) 2020.04.11
[17472번] 다리 만들기2  (0) 2020.04.11
[17142번] 연구소 3  (0) 2020.04.04
[13460번] 구슬 탈출 2  (0) 2020.04.04
[16637번] 괄호 추가하기  (0) 2020.04.04

댓글