본문 바로가기

백준 문제 풀이

백준 16928번 - 뱀과 사다리 게임(C++)

728x90

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

 

다익스트라, 그래프 등 많은 것을 고민했지만 그냥 bfs 풀이가 가장 쉬운 풀이이다. 

 

#include <iostream>
#include <queue>
#include <map>

using namespace std;

map<int, int> jump;
bool visited[101] = { false, };
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int N, M;
	cin >> N >> M;

	for (int i = 1; i <= 100; i++) {
		jump.insert({ i, -1 });
	}

	for (int i = 0; i < N + M; i++) {
		int a, b;
		cin >> a >> b;
		jump[a] = b;
	}

	queue<pair<int, int>> q;
	q.push({ 1, 0 });
	int answer = 0;
	while (!q.empty()) {
		int cnt = q.front().second;
		int idx = q.front().first;
		q.pop();
		//cout << idx << endl;
		if (idx == 100) {
			answer = cnt;
			break;
		}

		for (int i = 1; i <= 6; i++) {
			int next = idx + i;
			if (visited[next] == false) {
				if (jump[next] == -1) {
					q.push({ next, cnt + 1 });
					visited[next] = true;
				}
				else {
					q.push({ jump[next], cnt + 1 });
					visited[next] = true;
					visited[jump[next]] = true;
				}
			}
		}
	}

	cout << answer << '\n';
}

 

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

백준 12893번 - 적의 적(C++)  (1) 2024.01.29
백준 1786번 - 찾기(C++)  (1) 2024.01.26
백준 1967번 - 트리의 지름  (0) 2024.01.17
백준 9466번 - 텀 프로젝트 (C++)  (0) 2024.01.16
백준 1520번 - 내리막 길  (0) 2024.01.10