전공/백준
5014
yha97
2023. 2. 28. 11:42
날짜 : 2023. 02. 28
사용 언어 : python
문제

코드
import sys
from collections import deque
f, s, g, u, d = map(int, sys.stdin.readline().split()) # 층수, 현재, 목표, 위, 아래
res = list()
visited = [False] * (f + 1)
count = [0] * (f + 1)
def bfs(cur):
visited[cur] = True
q = deque()
q.append(cur)
while q:
now = q.popleft()
if now == g:
return count[g]
for i in (now + u, now - d): # 위, 아래로 이동
if i in range(1, f + 1) and not visited[i]: # 범위 포함, 방문 x
visited[i] = True # 방문처리
count[i] = count[now] + 1 # 버튼횟수 최신화
q.append(i) # push
if count[g] == 0: # 방문전력이 없다면
return -1
res = bfs(s)
if res < 0: print("use the stairs")
else: print(res)
풀이
- 각 층별 이동횟수, 방문여부 체크를 위한 리스트를 만든 후 bfs를 통해 위아래로 이동하면서 각 층수를 체크한다.
- 건물은 0층은 존재하지 않고 1층부터 존재하기 때문에 이를 주의한다.
알게된 점
- 단순 while문으로 해결하려 하다보니 문제가 복잡해졌다.
- 다른사람의 풀이를 간단히 참고해보니까 위, 아래로의 케이스를 확인하고 거기서 분기하여 방문처리를 하는 것이 더 효율적이었다.
- 다른 문제중에 숨바꼭질 문제도 있으니 풀어보아야겠다.
참고 사이트
- https://letalearns.tistory.com/43