코드
import sys
from collections import deque
input = sys.stdin.readline
def bfs():
q = deque()
q.append((1, 0))
visited[1] = True
while q:
x, t = q.popleft()
if x == 100:
print(t)
break
for i in range(1,7):
if 1 <= x+i <= 100:
if jumpTable[x+i] == 0 and not visited[x+i]:
q.append((x+i, t+1))
visited[x+i] = True
elif jumpTable[x+i] != 0:
dest = jumpTable[x+i]
if not visited[dest]:
q.append((dest, t+1))
visited[dest] = True
jumpTable = [0]*101
visited = [False]*101
n, m = map(int, input().split())
for _ in range(n+m):
frm, to = map(int, input().split())
jumpTable[frm] = to
bfs()
결과
풀이 방법
너비우선탐색(BFS)
를 활용하는 문제이다
- 현재 좌표에서 주사위를 던졌을 때 도착할 좌표와 현재까지 주사위를 던진 횟수를 큐에 넣고 방문처리한다.
- 단, 도착할 좌표가 방문하지 않은 좌표인 경우에만 큐에 넣는다.
- 또한, 주사위를 던진 결과 뱀과 사다리가 있는 좌표인 경우 그것을 타고 도착할 좌표가 이미 방문한 좌표인지 확인해야 한다.
- 뱀 또는 사다리 정보는 배열에 저장하였다.
방문처리
는 큐에서 꺼낸 다음이 아니라 큐에 넣고 나서 곧바로 방문처리
해야 시간초과가 발생하지 않는다.