
풀이
- 이미 방문한 번호에 대한 처리를 해주어야 시간초과 및 메모리 초과를 해결할 수 있다.
- 주사위대로만 가는경우, 뱀에 걸리는 경우, 사다리 통해 가는 경우를 다 넣어주어야한다.
from collections import deque
import sys
n, m = map(int, input().split())
sadari = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
bam = [list(map(int, sys.stdin.readline().split())) for _ in range(m)]
ba = []
for i in range(m):
ba.append(bam[i][0])
visited = [0]*200
def bfs(x,cnt):
q = deque()
q.append((x,cnt))
while q:
nx , cnt= q.popleft()
if visited[nx] == 0:
visited[nx] = 1
else: continue
if nx == 100:
return print(cnt)
for i in range(6, 0, -1):
if nx+i > 100:
continue
if (nx+i) not in ba:
q.append((nx+i, cnt+1))
for k in range(m):
if bam[k][0] == nx+i:
q.append((bam[k][1], cnt+1))
for j in range(n):
if sadari[j][0] == nx+i:
q.append((sadari[j][1], cnt+1))
bfs(1, 0)