문제링크 : https://www.acmicpc.net/problem/16928

 

16928번: 뱀과 사다리 게임

첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으

www.acmicpc.net

 문제설명 

 

1. 주사위를 이용하여 1번 칸에서 100번칸으로  이동하여야한다.

2. 중간에 사다리를 이용하면 더 높은 곳으로 갈 수있고, 뱀을 이용하면 더 낮은 곳으로 움직일 수있다.

3. 주사위,사다리,뱀을 이용하여 100번칸으로 갈 수있는 주사위를 최소 몇번 굴려야 하는지 출력

 

 알고리즘 

 

1. 사다리와 뱀을 구분하지말고 입력 받은뒤 정렬 해준다.

2. bfs 를 이용하여 현재 위치에서 주사위를 굴려 갈 수있는 칸을 모두 구해주고 

3. 100번 칸에 도착했을 떄 BFS의 깊이(DEPTH) 를 출력 하면된다.

 

 코드 

 

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
#include<iostream>
#include<vector>
#include<queue>
 
 
using namespace std;
typedef pair<intint>  p;
vector<p> v;
int N, M, visited[101], result = 0;
 
int number(int n) {
 
    //뱀이나 사다리를 만나면 
    for (int i = 0; i < N + M; i++) {
        if (v[i].first == n)return v[i].second;
    }
 
    //안 만나면
    return n;
 
}
 
void bfs() {
    queue<int> q;
    visited[1= 1;
    q.push(1);
    while (!q.empty()) {
        int Size = q.size();
        
        for (int i = 0; i < Size; i++) {
            int x = q.front();
            q.pop();
 
            //갈수있는 칸 다넣어
            for (int j = 1; j <= 6; j++) {
                if (x + j <= 100 && !visited[x + j]) {
                    int y = number(x + j);
                    q.push(y);
                    visited[y]=1;
                }
            }
 
            if (visited[100])return;
        }
        result++;
    
    }
 
 
}
 
 
int main() {
    cin.tie(NULL);
    ios::sync_with_stdio(false);
    cin >> N >> M;
 
    for (int i = 0; i < N + M; i++) {
        int a, b;
        cin >> a >> b;
        v.push_back(p(a, b));
    }
    bfs();
    cout << result+1;
 
 
}
cs

'c++ > 백준' 카테고리의 다른 글

백준 14890번: 경사로  (0) 2020.06.12
백준 16922번 : 로마 숫자 만들기  (0) 2020.06.03
백준 14226번 : 이모 티콘  (0) 2020.06.03
백준 1713번: 후보 추천하기  (0) 2020.05.27
백준 10815번 : 숫자 카드  (0) 2020.05.27
ariz1623