백준 문제 링크
스타트링크
- BFS를 사용했다.
- 모든 원소를 입력받고,
방문 처리할 리스트 visited,
버튼의 수를 저장할 answer를 만들어준다.- bfs 함수를 만들것이다.
엘리베이터로 이동할 수 있는지 확인할 변수 isFalse = False를 만든다.
큐에서 원소를 뽑아 그 원소가 목표 지점인 g층과 같다면
isFalse = True로 지정하고 break 해준다.- 갈 수 있는 좌표는 u 만큼 위로, d 만큼 아래로 갈 수 있으므로
[ x + u, x - d ] 2가지가 있다.
좌표가 범위 안에 속하고, 아직 방문하지 않았을 때
방문 처리하고, 큐에 넣고, answer[다음] = answer[현재] + 1 해준다.- 마지막으로 isFalse를 return 해준다.
s에 대해 함수를 실행했을 때
- isFalse == False일 때 'use the stairs' 를 출력
- isFalse == True일 때 answer[g] 를 출력하면 끝!
from collections import deque
f, s, g, u, d = map(int, input().split())
visited = [False] * (f + 1)
answer = [0] * (f + 1)
def bfs(x):
queue = deque()
queue.append(x)
visited[x] = True
isFalse = False
while queue:
x = queue.popleft()
if x == g:
isFalse = True
break
for i in [x + u, x - d]:
if 1 <= i <= f:
if not visited[i]:
queue.append(i)
visited[i] = True
answer[i] = answer[x] + 1
return isFalse
if bfs(s) == True:
print(answer[g])
else:
print('use the stairs')