5014번: 스타트링크
첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.
www.acmicpc.net
BFS 문제이다
엘레베이터를 타고 올라가든 내려가든 버튼을 누르는 횟수는 1로 동일하기 때문에 (=가중치가 1로 똑같기 때문에)
중복방문을 허용하지 않는 BFS 문제라고 생각하면 된다.
버튼을 눌러 얼마만큼 이동하느냐는 로직에 큰 영향을 주지 않는다. 범위만 넘어가지 않도록 설정해주면 된다.
가중치가 여러 개여서 중복방문을 허용하는 문제👇
2021.03.18 - [Algorithm/Graph] - [백준 BOJ] 13549 숨바꼭질3 (Python)
[백준 BOJ] 13549 숨바꼭질3 (Python)
13549번: 숨바꼭질 3 (acmicpc.net) 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순..
summa-cum-laude.tistory.com
from collections import deque
def bfs(start):
q = deque([start])
cnt = [-1] * f
cnt[start] = 0
while q:
cur_floor = q.popleft()
if cur_floor == g - 1: # 도착하면 현재까지 누른 횟수를 반환
return cnt[cur_floor]
for i in range(2):
if i == 0:
next_floor = cur_floor + u
else:
next_floor = cur_floor - d
if not 0 <= next_floor < f or cnt[next_floor] != -1:# 범위, 방문 여부 체크
continue
q.append(next_floor)
cnt[next_floor] = cnt[cur_floor] + 1
return 'use the stairs' # 탐색을 다 해도 도착 못하면 문자열 반환
f, s, g, u, d = map(int, input().split())
print(bfs(s - 1))
'Algorithm > Graph' 카테고리의 다른 글
[백준 (BOJ)] 1405 - 미친 로봇 (Python) (0) | 2021.05.12 |
---|---|
[백준 BOJ] 13549 숨바꼭질3 (Python) (0) | 2021.03.18 |
[백준] 1916번 최소비용 구하기 (Python) (0) | 2021.03.02 |
[프로그래머스] 순위 (Python) (0) | 2021.02.26 |
[프로그래머스] 합승 택시 요금 (Python) (0) | 2021.02.25 |