알고리즘

[백준, 파이썬, 5014번] 스타트링크

hminor 2024. 5. 2. 11:27
반응형

풀이

  • dfs, bfs 문제집에 있는 문제로
  • 해당 알고리즘을 활용해야 한다는 것을 알고 있었기에 간단히 해결할 수 있었는데
  • 만약 모르는 상황이었다면 좀 걸렸을 것 같다.
  • 우선 현재인 s 층에서 u,d 버튼을 눌렀을 때 지정 범위 내에 있다면
  • 모두 이동할 수 있게 하는데 여기서 
  • 무한 순회하지 않도록 방문 표시를 하여 해결할 수 있도록 했으며
  • bfs는 탐색하기 전에 모든 경우에 대해 추가 후 탐색을 하는 것이기에
  • q에 추가하기 전에 먼저 방문 표시를 하여 해결하도록 했으며
  • bfs는 모든 경우를 하나씩 확인하는 것이기에
  • 가장 먼저 결과에 다다른 것이 가장 빠른 방법이기 때문에
  • while문을 바로 탈출하도록 하여 해결.

 

import sys
from collections import deque
# dfs 활용
f,s,g,u,d = map(int,input().split())
result = sys.maxsize
visit = [False]*(f+1)
visit[s] = True # dfs는 방문하기 전 방문 체크해야 중복 X
q = deque([[s,0]])

while q:
    now,cnt = q.popleft()
    if now == g:
        result = min(result, cnt)
        break
    else:
        for nt in [now+u,now-d]:
            if 0<nt<=f and not visit[nt]:
                visit[nt] = True
                q.append([nt,cnt+1])

if result == sys.maxsize: print("use the stairs")
else: print(result)