문제 링크
https://www.acmicpc.net/problem/12851
12851번: 숨바꼭질 2
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때
www.acmicpc.net
문제 풀이
import sys
input = sys.stdin.readline
from collections import deque
n, k = map(int, input().split())
queue = deque([n])
cnt = 0
result = 0
visited = [0] * 100001
while queue:
now = queue.popleft()
if now == k:
result = visited[now]
cnt += 1
continue
for next in (now - 1, now + 1, now * 2):
if 0 <= next <= 100000 and (not visited[next] or visited[next] == visited[now] + 1):
visited[next] = visited[now] + 1
queue.append(next)
print(result)
print(cnt)
bfs를 통해 풀이했습니다.
단순히, 최소 시간만 구하는 것이 아니라 최소 시간에 대한 경로의 수도 구해야 하는 문제이므로,
방문 처리를 하는 visited 배열에 시간을 함께 저장하여 처리했습니다.
기존에는 not visited[next]라는 조건만 주어 방문했던 곳은 다신 방문하지 않게 했었다면
이 문제에서는 방문했었던 지점이라도 방문한 시간이 같다면 방문할 수 있게하여
다양한 경로의 수를 카운트할 수 있게 했습니다.
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 1202 보석 도둑 (파이썬 python) (1) | 2024.02.20 |
---|---|
[백준] 1012 유기농 배추 (파이썬 python) (0) | 2024.02.14 |
[백준] 10830 행렬 제곱 (파이썬 python) (1) | 2024.02.13 |
[백준] 1865 웜홀 (파이썬 python) (0) | 2024.02.13 |
[백준] 1504 특정한 최단 경로 (파이썬 python) (1) | 2024.02.13 |