백준 16928번 뱀과 사다리 게임
코드 풀이
- 현재 칸이 이동할 수 있는 경우의 수는 자신의 칸에서
+1 ~ +6
입니다.
- 뱀과 사다리가 연결된 칸을 만났을 경우 연결된 칸으로만 이동할 수 있습니다.
- 각 칸에서 갈 수 있는 경우의 수를 그래프로 묶고,
DFS
방식을 적용해 해결할 수 있습니다.
- cost 변수에는 해당 칸에 도달할 수 있는 최소 경우의 수가 입력됩니다.
- 해당 칸을 한 번도 방문하지 않았거나, 방문할 예정인 칸에 적힌 cost의 값이 현재 칸에서 이동하는 경우의 수보다 크다면, cost값을 갱신합니다(if문).
import sys
sys.setrecursionlimit(10**6)
n, m = map(int, sys.stdin.readline().split(' '))
graph = [[] for _ in range(100+1)]
short_cut = []
for _ in range(n+m):
x, y = map(int, sys.stdin.readline().split(' '))
graph[x].append(y)
short_cut.append(x)
for i in range(1, 100+1):
if i in short_cut:
continue
for j in range(1, 6+1):
if i+j <= 100:
graph[i].append(i+j)
cost = [0] * (100+1)
def dfs(x, cnt):
cost[x] = cnt
if x in short_cut:
cnt -= 1
for i in graph[x]:
if not cost[i] or cost[i] > cnt + 1:
dfs(i, cnt+1)
dfs(1, 0)
print(cost[100])