뱀과 사다리 게임 ⇒ 도착점에 도착할 수 있는 최소 횟수?
게임판 10 x 10, 1 ~100까지 수 순서대로 적혀있음
1번 ⇒ 100번 칸으로 이동
1번 칸과 100번 칸은 뱀과 사다리의 시작 또는 끝이 아님
모든 칸은 최대 하나의 사다리 또는 뱀 → 동시에 두 가지를 모두 가지고 있는 경우는 없다.
항상 100번 칸에 도착할 수 있는 입력만 주어진다.
⇒ 게임판의 상태가 주어졌을 때, 100번 칸에 도착하기 위해 주사위를 굴려야 하는 횟수의 최솟값?
입력 :
| 사다리의 수 **N** 뱀의 수 **M** (1 ≤ N ≤ 15, 1 ≤ M ≤ 15)
| N개 줄 : 사다리의 정보 x, y (x < y) (x번 칸에 도착하면 y번 칸으로 이동)
| M개 줄 : 뱀의 정보 u, y (u > v) (u번 칸에 도착하면 v번 칸으로 이동)
출력 : 100번 칸에 도착하기 위해 주사위를 굴려야 하는 최소 회수
예제 입력
import sys
from collections import deque
def solution():
input = sys.stdin.readline
N, M = map(int, input().split())
ladders = dict()
snakes = dict()
for _ in range(N):
x, y = map(int, input().split())
ladders[x] = y
for _ in range(M):
u, v = map(int, input().split())
snakes[u] = v
visited = [False] * 101
rolls = 0
#BFS
cur = 1
queue = deque()
queue.append((cur, rolls))
visited[1] = True
while queue:
cur, rolls = queue.popleft()
if cur == 100:
print(rolls)
break
for dice in range(1,7):
next = cur + dice
if next <= 100:
if next in ladders.keys():
next = ladders[next]
elif next in snakes.keys():
next = snakes[next]
if not visited[next] :
queue.append((next, rolls+1))
visited[next] = True
solution()
BFS/DFS 문제 오랜만에 풀었더니 감 다까먹었다.. 열공하자,,