[백준 16928번 C/C++] 뱀과 사다리 게임
[백준 16928번 C/C++] 뱀과 사다리 게임
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 <vector>
#include <queue>
#include <map>
using namespace std;
int n, m; // n: 사다리 수, m: 뱀의 수
map<int, int> ladder, snake;
int ch[101];
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
int input;
for (int i = 0; i < n; i++) {
cin >> input;
cin >> ladder[input];
}
for (int i = 0; i < m; i++) {
cin >> input;
cin >> snake[input];
}
queue<int> Q;
Q.push(1);
ch[1] = 0; // 출발 위치는 이동 횟수 0으로 초기화
while (!Q.empty())
{
if (Q.front() == 100) break;
int front = Q.front();
Q.pop();
for (int i = 1; i <= 6; i++)
{
int newLoc = front + i; // +1 ~ 6 주사위 굴려서 갈 수 있는 위치
if (newLoc > 100) continue; // 게임 판을 벗어나는 경우는 제외
if (ch[newLoc] == 0) // 방문하지 않은 위치인 경우
{
ch[newLoc] = ch[front] + 1; // 방문 체크 및 이동 횟수 기록
if (ladder.find(newLoc) != ladder.end()) // 사다리를 만난 경우
{
Q.push(ladder[newLoc]); // 사다리를 통해 이동할 위치를 큐에 넣음
if (ch[ladder[newLoc]] == 0) { // 사다리를 통해 이동한 위치를 아직 방문하지 않았다면
ch[ladder[newLoc]] = ch[newLoc]; // 방문 체크 및 이동 횟수 기록
}
}
else if (snake.find(newLoc) != snake.end()) // 뱀을 만난 경우
{
Q.push(snake[newLoc]); // 뱀을 통해 이동할 위치를 큐에 넣음
if (ch[snake[newLoc]] == 0) { // 뱀을 통해 이동한 위치를 아직 방문하지 않았다면
ch[snake[newLoc]] = ch[newLoc]; // 방문 체크 및 이동 횟수 기록
}
}
else // 사다리도 뱀도 만나지 않은 일반적인 경우
{
Q.push(newLoc); // 사다리를 통해 이동할 위치를 큐에 넣음
}
}
}
}
cout << ch[100] << endl; // 도착점까지의 최소 이동 횟수를 출력
return 0;
}
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 25682번 C/C++] 체스판 다시 칠하기 2 (0) | 2023.12.09 |
---|---|
[백준 1753번 C/C++] 최단경로 (0) | 2023.12.07 |
[백준 18808번 C/C++] 스티커 붙이기 (1) | 2023.12.05 |
[백준 9019번 C/C++] DSLR (1) | 2023.12.04 |
[백준 5430번 C/C++] AC (0) | 2023.12.03 |
댓글
이 글 공유하기
다른 글
-
[백준 25682번 C/C++] 체스판 다시 칠하기 2
[백준 25682번 C/C++] 체스판 다시 칠하기 2
2023.12.09 -
[백준 1753번 C/C++] 최단경로
[백준 1753번 C/C++] 최단경로
2023.12.07 -
[백준 18808번 C/C++] 스티커 붙이기
[백준 18808번 C/C++] 스티커 붙이기
2023.12.05 -
[백준 9019번 C/C++] DSLR
[백준 9019번 C/C++] DSLR
2023.12.04