본문 바로가기
Programming Solve/BOJ

BOJ 16928 - 뱀과 사다리 게임 / C++

by msm1029 2022. 4. 18.
반응형

문제 링크 : 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

 

 

풀이

입력 받을 때, 뱀과 사다리를 굳이 나누어 입력받을 필요 없이 하나의 지름길로 취급하여 n+m만큼 입력받는다.

지름길 변수 shortcut[a] = b의 의미는 a로 들어가면 b로 나오게 된다는 의미이다.

 

다음으로, BFS를 통해 시작점 1 카운트 0부터 시작하여 1~6의 주사위에 따른 탐색을 진행한다.

도중에 지름길을 만나면 지름길로 이동하는 방식으로 100이 되는 최소 경우의 수를 구하면 된다.

 

코드

#include <bits/stdc++.h>
using namespace std;

int n, m, ans = 0;
int shortcut[101] = { 0, };
bool visited[101] = { false, };

int main(){
    cin >> n >> m;

    for(int i=0; i<n + m; i++){
        int a, b;
        cin >> a >> b;
        shortcut[a] = b;
    }

    queue<pair<int, int> > q;
    q.push(make_pair(1, 0));

    while(!q.empty()){
        int cur = q.front().first;
        int cnt = q.front().second;

        q.pop();
        visited[cur] = true;
        if(cur == 100) ans = cnt;

        for(int i=1; i<=6; i++){
            int next = cur + i;
            if(next > 100) continue;
            next = shortcut[next] == 0 ? next : shortcut[next];

            if(!visited[next]){
                visited[next] = true;
                q.push(make_pair(next, cnt + 1));
            }
        }
    }
    
    cout << ans;
}
반응형

'Programming Solve > BOJ' 카테고리의 다른 글

BOJ 1107 - 리모컨 / C++  (0) 2022.04.21
BOJ 1074 - Z / C++  (0) 2022.04.21
BOJ 18870 - 좌표 압축 / C++  (0) 2022.04.17
BOJ 15829 - Hashing / C++  (0) 2022.04.14
BOJ 10816 - 숫자 카드 2 / C++  (0) 2022.04.13