알고리즘/백준

[백준 3190] 뱀 C++

겜도리도리 2021. 9. 12. 23:55
반응형

문제

백준 3190

 

3190번: 뱀

 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
using namespace std;
 
int N, K, L;
deque<pair<intint>> dq;
vector<int> vtime;
vector<char> vdir;
int map[100][100];
int dx[] = { 10-10 };
int dy[] = { 010-1 };
int dummy(int sx, int sy)
{
    int dir = 0;
    int cnt = 0;
    int x, y;
    int idx = 0;
    dq.push_back(make_pair(sx, sy));
    while (1)
    {
        x = dq.front().first;
        y = dq.front().second;
        map[y][x] = 2;
        cnt++;
        int nx = x + dx[dir];
        int ny = y + dy[dir];
        //게임 끝
        if (nx < 0 || ny < 0 || nx >= N || ny >= N || map[ny][nx] == 2)
        {
            return cnt;
        }
        else
        {
            dq.push_front(make_pair(nx, ny));
            // 사과 있으면 그대로, 없으면 dq 끝에서 pop 해주기
            if (map[ny][nx] != 1)
            {
                int xend, yend;
                xend = dq.back().first;
                yend = dq.back().second;
                map[yend][xend] = 0;
                dq.pop_back();
            }
            //시간 확인 후 방향 변경
            if (cnt == vtime[idx])
            {
                if (vdir[idx] == 'L')
                {
                    dir += 3;
                    dir %= 4;
                }
                else
                {
                    dir += 1;
                    dir %= 4;
                }
                if (idx < vtime.size() - 1)
                {
                    idx++;
                }
            }
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    cin >> N;
    cin >> K;
    // 사과
    for (int i = 0; i < K; i++)
    {
        int applex, appley;
        cin >> applex >> appley;
        map[applex - 1][appley - 1= 1;
    }
    cin >> L;
    // 명령
    for (int i = 0; i < L; i++)
    {
        int t;
        char d;
        cin >> t >> d;
        vtime.push_back(t);
        vdir.push_back(d);
    }
    cout << dummy(00);
    return 0;
}
cs
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 11048] 이동하기 C++  (0) 2021.09.14
[백준 1915] 가장 큰 정사각형 C++  (0) 2021.09.13
[백준 14502] 연구실 C++  (0) 2021.09.11
[백준 2583] 영역 구하기 C++  (0) 2021.09.10
[백준 1992] 쿼드트리 (C++)  (0) 2021.09.09