Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- Unreal
- WinAPI
- 24779
- 다음소수
- unrealengine
- 백준 c++ 24479번
- Perforce
- 다익스트라
- dx12 정리
- BFS
- 2d 박스충돌
- 4134번
- dx12
- 11286번
- directx12 그리기 연산2
- 드래곤플라이트 모작
- DirectX12
- lis응용
- 랜더링 파이프라인
- 2075번
- 백준 24444 c++
- 애니메이션
- C++
- 루트서명
- 백준 1260 c++
- 2565번
- 그리기 연산
- 뱀과사다리게임
- 바이토닉 수열
- 백준
Archives
- Today
- Total
game-1 님의 블로그
[백준] C++ 16928번 뱀과 사다리 게임 본문



문제:https://www.acmicpc.net/problem/16928
풀이)
게임 설명:
뱀과 사다리 게임은 1번 칸에서 시작해 주사위를 굴려 100번 칸에 도착하는 최소 이동 횟수를 구하는 문제입니다.
사다리를 타면 더 높은 칸으로 이동하고, 뱀을 만나면 낮은 칸으로 이동합니다.
풀이 흐름:
맵 초기화: 각 칸이 자기 자신을 가리키도록 설정.
입력 처리: 사다리와 뱀 정보를 입력받아 해당 칸의 이동 경로(map)를 업데이트.
BFS 탐색:
주사위를 굴려 이동 가능한 칸을 계산.
뱀 또는 사다리를 만나면 해당 칸으로 이동.
방문하지 않은 칸이면 방문 횟수를 갱신하고 큐에 추가.
요약)
BFS(너비 우선 탐색)를 사용하여 최소 이동 횟수를 구합니다.
큐를 활용해 이동 경로를 탐색하며, 방문한 칸은 다시 방문하지 않습니다.
코드)
#include<iostream>
#include<array>
#include<queue>
using namespace std;
array<int, 101>map;
array<int, 101>visited;
void bfs(int start) {
queue<int> q;
q.push(start);
visited[start] = 0;
while (not q.empty()) {
int current = q.front();
q.pop();
for (int i = 1; i <= 6; ++i) {
int nx = current + i;
if (nx > 100) continue; // 판을 넘어갈경우
nx = map[nx]; //뱀 사다리를 찾는다.
if (visited[nx] == -1) {
visited[nx] = visited[current] + 1;
q.push(nx);
}
}
}
}
int main()
{
int n, m;
cin >> n >> m;
//배열 초기화
for (int i = 1; i <= 100; ++i) {
map[i] = i;
visited[i] = -1;
}
//뱀 사다리 입력
for (int i = 1; i <= n + m; ++i) {
int x, y;
cin >> x >> y;
map[x] = y;
}
bfs(1);
cout << visited[100];
}

'백준 문제풀이' 카테고리의 다른 글
| [백준] 3273번 두 수의 합 C++ (1) | 2025.01.18 |
|---|---|
| [백준] 2565번 C++ 전깃줄 (1) | 2025.01.17 |
| [백준] C++ 2805번 나무자르기 (1) | 2025.01.14 |
| [백준] C++ 1697번:숨바꼭질 (1) | 2025.01.13 |
| [백준] C++ 11054번:가장 긴 바이토닉 부분 수열 (2) | 2025.01.10 |