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
생각하기
버튼을 누르는 최소 횟수를 구하는 것이기 때문에 전형적인 BFS 문제라고 생각하였다
시간 복잡도
S, G, F가 모두 1000000 이하의 수이므로 충분히 BFS로 풀어도 시간 안에 들어올 수 있는 문제
구현하기
q = deque()
- (현재 강호가 있는 층, 현재까지 누른 버튼의 횟수) 를 q에 append / popleft 한다
올라가는 버튼
- 현재 강호가 있는 층 + U 가 건물을 넘지 않아야 함
- visited에 있는 층이 아니어야 함
내려가는 버튼
- 현재 강호가 있는 층 - D가 건물을 넘지 않아야 함
- visited에 있는 층이 아니어야 함
from collections import deque
F, S, G, U, D = map(int, input().split())
q = deque()
visited = set()
visited.add(S)
q.append((S, 0))
while q:
cur, cnt = q.popleft()
if cur == G:
print(cnt)
exit(0)
if (1<= cur + U <= F) and (cur+U not in visited):
visited.add(cur+U)
q.append((cur+U, cnt+1))
if (1<= cur - D <= F) and (cur-D not in visited):
visited.add(cur-D)
q.append((cur-D, cnt+1))
print('use the stairs')
'알고리즘 > BFS' 카테고리의 다른 글
[BFS] 백준 2234 : 성곽 - 파이썬 Python (0) | 2022.02.23 |
---|---|
[BFS] 백준 17141 : 연구소2 - 파이썬 Python (0) | 2022.02.17 |
[BFS] 백준 14395 : 4연산 - 파이썬 Python (0) | 2022.02.07 |
백준 16954번 : 움직이는 미로 탈출 - 파이썬 Python (0) | 2022.01.01 |
백준 14442번 : 벽 부수고 이동하기2 - 파이썬 Python (0) | 2021.12.26 |