https://www.acmicpc.net/problem/5014
시간 1초, 메모리 256MB
input :
output :
조건 :
편안....
모든 경우의 수를 확인해서 dp 배열에 저장을 한 후에 마지막에 g 층의 값을 확인하자.
u 버튼을 누르는 경우는 현재 층 + u 한 것이 전체 층 보다 낮을 때 만 가능하며,
d 버튼을 누르는 경우는 현재 층 - d 한 것이 0보다 클 때만 가능하다.
이렇게 모든 경우를 구해서 마지막에 g층을 찾아 갔을 때 -1 이면 엘리베이터로 못 가는 거기 때문에 use the stairs를 출력.
import sys
from _collections import deque
f, s, g, u, d = map(int, sys.stdin.readline().split())
dp = [-1] * (f + 1)
q = deque([])
q.append((s, 0))
while q:
now, button = q.popleft()
if dp[now] != -1:
continue
dp[now] = button
if now + u <= f and dp[now + u] == -1:
q.append((now + u, button + 1))
if now - d > 0 and dp[now - d] == -1:
q.append((now - d, button + 1))
if dp[g] == -1:
print('use the stairs')
else:
print(dp[g])