문제풀이 전략:
1. 전형적인 BFS문제 , u, d, 를 리스트에 넣고 BFS 돌릴 것
2. 방문 처리와, 값 저장할 리스트 생성
3. 큐를 돌면서 현재 값과 내가 가고싶은 층이 같으면 값 출력
4. 그것이 아니면 위, 아래 층으로 이동 이때 1층 이상 F층 이하가 아니면 이동 못함으로 무시
5. 방문 안했으면 이전층 값에 1더함, 그리고 방문처리, 큐에 추가
6. 큐를 끝냈는데도 도착 못하면 도착못함을 리턴
import sys
from collections import deque
import sys
input = sys.stdin.readline
f, s, g, u, d = map(int, input().split())
dx = [u, -d]
#bfs로 풀것임
q = deque()
# 현재 위치 추가
q.append(s)
visited = [0] * (1000001)
visit = [False]*(1000001)
def bfs():
while q:
x = q.popleft()
# 현재 층 방문 처리
visit[x] = True
# 원하는 층에 다다르면 값 출력
if x == g:
return visited[x]
for i in range(2):
nx = x + dx[i]
# (만약, U층 위, 또는 D층 아래에 해당하는 층이 없을 때는, 엘리베이터는 움직이지 않는다)
#이 조건이 1층 부터 F 층 까지를 나타냄
if nx < 1 or nx > f:
continue
if visited[nx] == 0 and not visit[nx]:
visited[nx] = visited[x]+1
visit[nx] = True
q.append(nx)
return 'use the stairs'
print(bfs())
반례를 몇개 제시해보면,
input:
10 10 10 2 1
result :
0
input:
10 1 4 10 1
result:
"use the stairs"