알고리즘/백준
5014번: 스타트 링크
happenundo
2024. 3. 12. 23:45
728x90
5014번: 스타트링크
첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.
www.acmicpc.net
전형적인 BFS문제다.
이 문제는 2차원 리스트도 아니고, 1차원 리스트를 활용하므로 더 쉬운 문제다.
# 5014번: 스타트링크
from collections import deque
import sys
input = sys.stdin.readline
f, s, g, u, d = map(int, input().split())
building = [-1] * (f+2) # 건물의 층 수(방문하지 않은 경우 -1)
building[s] = 0 # 시작점까지 누른 버튼의 수는 0
q = deque([s]) # 방문한 층을 저장하는 큐, 시작층을 넣고 시작
# BFS 시작
while q:
now = q.popleft()
for i in [u, -d]:
new_now = now + i
if new_now > 0 and new_now <= f:
if building[new_now] == -1:
building[new_now] = building[now] + 1
q.append(new_now)
if building[g] != -1:
break
if building[g] == -1:
print("use the stairs")
else:
print(building[g])
...
# BFS 시작
while q:
...
if building[g] != -1:
break
...
이 부분의 코드를
....
# BFS 시작
while q:
now = q.popleft()
if now == g:
break
for i in [u, -d]:
...
이런 식으로 바꿔줄 수도 있겠다.
큐에서 g가 나왔다는 것은 g층은 이미 처리되었다는 것을 의미하므로 더 이상 반복문을 돌 필요가 없다.
728x90