본문 바로가기

알고리즘 문제풀이

백준 5014 스타트링크 Python BFS 실버 1

가고 안가고를 통해 결정된다고 생각 -> 부분집합문제인가? -> DFS로 해보자

하지만 예외처리를 하기 어렵다 -> BFS로 전환

BFS에서 어떻게 부분집합을 결정할 수 있을까 고민

for _ in "Iterable" 을 쓸 생각을 할 수 있냐 없냐가 이 문제의 해결 요소라고 생각한다.

평소에 range()랑 같이 쓰면서 해당 사용법에 대해서 생각치 못한게 이 문제를 자력으로 해결못했었던 요소라고 생각한다.

# 5014 스타트링크 실버 1
from collections import deque
f,s,g,u,d = map(int,input().split())
# 10층 건물로 이루어졌고 현재 1층이고 회사는 10층 한번에 2층 올라가고 1층 내려온다
# print(f,s,g,u,d)
flag = 0
visited = [0] * (f+1)
deq = deque()
deq.append(s)
visited[s] = 1
while deq:
    level = deq.popleft()
    if level == g:
        flag = 1
        break
    # if visited[level]: continue
    for x in [level+u, level-d]:
        if 0 < x <= f and visited[x] == 0:
            visited[x] = visited[level] +1
            deq.append(x)
if flag:
    print(visited[g]-1)
else:
    print('use the stairs')