반응형
문제 설명
풀이 코드
숨바꼭질 3번 문제와 완전 똑같은데 순간이동시 시간이 1초 소요된다는 점만 다르다.
- 동생의 위치 k에 도달할 때 까지 문제에 주어진 3가지 이동방법으로 탐색한다.
- 문제에 주어진 범위 0 <= N <= 100,000안 일 경우 탐색하도록 한다.
- 순간이동을 많이 쓰는 방법이 가장 빠르게 도착하는 방법으로 순간이동은 appendleft()로 먼저 탐색하도록 한다.
- 동생의 위치 k에 도달하면 도착 시작 값을 반환한다.
정답 코드
from collections import deque
import sys
input = sys.stdin.readline
n, k = map(int, input().split()) # 수빈이의 위치, 동생의 위치
def bfs(n, k):
visited = [-1] * 100001
visited[n] = 0
q = deque([n])
while q:
cur = q.popleft()
if cur == k:
return visited[cur]
# 동생의 위치에 도달할 때 까지, 3가지의 이동 경우를 확인 (x + 1, x - 1, x * 2)
for next in (cur + 1, cur - 1, cur * 2):
if 0 <= next <= 100000 and visited[next] == -1:
if next == cur * 2:
visited[next] = visited[cur] + 1
q.appendleft(next) # appendleft()로 순간이동을 먼저 탐색
else:
visited[next] = visited[cur] + 1 # 걸어서 이동은 1초 소요
q.append(next)
print(bfs(n, k))
'◼ 코딩테스트 > DFS,BFS' 카테고리의 다른 글
[Python/파이썬] 백준 9019 - DSLR (0) | 2023.06.07 |
---|---|
[Python/파이썬] 백준 5014 - 스타트링크 (0) | 2023.06.06 |
[Python/파이썬] 백준 16953 - A -> B (0) | 2023.06.03 |
[Python/파이썬] 백준 13460 - 구슬 탈출2 (0) | 2023.06.02 |
[Python/파이썬] 백준 16234 - 인구 이동 (0) | 2023.05.30 |