danbibibi
article thumbnail

문제

문제 바로가기> BOJ 16928번: 뱀과 사다리 게임

 

16928번: 뱀과 사다리 게임

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

www.acmicpc.net

 

풀이

사다리와 뱀 정보를 path 배열에 저장해주고, BFS를 통해 문제를 해결할 수 있다.

BFS를 진행하는 이유는 "100번 칸에 도착하기 위해 주사위를 굴려야하는 횟수의 최솟값"을 구해야하기 때문이다.

#include<iostream>
#include<queue>
#define MAX 101
using namespace std;

int N, M;
int path[MAX];
bool visited[MAX];

void input(){
    cin >> N >> M;

    int x, y;
    while (N--){
        cin >> x >> y;
        path[x] = y;
    }
    while(M--){
        cin >> x >> y;
        path[x] = y;
    }
}

int solution(){
    queue<pair<int, int>> q;
    q.push({1, 0});

    while (!q.empty()){
        int num = q.front().first;
        int cnt = q.front().second;
        q.pop();
        if (num == 100) return cnt;
        for (int i = 1; i<=6; i++){
            if(visited[num+i]) continue;
            visited[num+i] = true;
            if(path[num+i]!=0) q.push({path[num+i], cnt+1});
            else q.push({num+i, cnt+1});
        }
    }
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    input();
    cout << solution();
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 17485번: 진우의 달 여행 (Large)  (0) 2023.09.04
BOJ 2230번: 수 고르기  (0) 2023.09.03
BOJ 1347번: 미로 만들기  (0) 2023.08.08
BOJ 9207번: 페그 솔리테어  (1) 2023.05.16
BOJ 11438번: LCA 2  (0) 2023.04.20
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로