본문 바로가기

백준 문제풀이

5014번: 스타트링크 / silver 1 / BFS

https://www.acmicpc.net/problem/5014

 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

'''
5014번: 스타트링크 / silver 1 / BFS
'''
from collections import deque

# 입력받기
max_floor, start, end, up, down = map(int, input().split())
# que, visited 리스트 선언 및 초기화
que = deque()
visited = list(0 for _ in range(max_floor + 1))
que.append((start))
visited[start] = 1
# BFS 알고리즘
while que:
    now_floor = que.popleft()
    if now_floor == end:
        print(visited[end] - 1)
        exit()
    for next_floor in (now_floor + up, now_floor - down):
        if 0 < next_floor <= max_floor and visited[next_floor] == 0:
            visited[next_floor] = visited[now_floor] + 1
            que.append(next_floor)
if visited[end] == 0:
    print('use the stairs')

코드 리뷰

- 해당 문제는 BFS 알고리즘을 활용하여 문제를 해결했습니다!

- visited 는 방문한 층이면 1이상의 값을 넣고, 방문하지 않은 층이면 0을 넣었습니다.

- 따라서 visited 리스트는 층수에 방문을 했는지 안했는지를 0 또는 1이상의 값으로 확인을 하며 /버튼을 누른 횟수를 측정하기도 합니다. (실제 누른 버튼 횟수 - 1)