반응형
https://www.acmicpc.net/problem/12851
12851번: 숨바꼭질 2
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때
www.acmicpc.net
💡IDEA
BFS를 사용하는 문제이다.
1697번 숨바꼭질 문제와 유사한데, 수빈이가 동생을 찾는 가장 빠른 시간 뿐만 아니라, 가장 빠른 시간으로 찾는 방법의 개수도 구해야 한다.
조심해야 할 점은 방문 처리 부분이다.
예를 들어, 1에서 2로 변했다면 +1을 했을 수도 있고, *2를 했을수도 있어서 append 시에 방문 처리를 해주면 +1로 간 방법과 *2로 간 방법이 같다고 처리되어 방법의 개수를 찾는데 혼선이 있을 수 있다.
따라서, pop 시에 방문 처리를 해주는 것이 적절하다.
📌CODE
from collections import deque
N, K = map(int, input().split())
ans = 100000
cnt = 0
def solve(n):
global ans, cnt
q = deque()
q.append((n, 0))
v = [0]*100001
while q:
now, d = q.popleft()
v[now] = 1
if now == K and ans >= d:
ans = d
cnt += 1
for nc in [now-1, now+1, now*2]:
if 0<=nc<=100000 and not v[nc]:
q.append((nc, d+1))
solve(N)
print(ans)
print(cnt)
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ][python] 1043. 거짓말 (0) | 2022.07.04 |
---|---|
[BOJ][python] 2638. 치즈 (0) | 2022.07.04 |
[BOJ][python] 10830. 행렬 제곱 (0) | 2022.07.02 |
[BOJ][python] 15666. N과 M (12) (0) | 2022.07.02 |
[BOJ][python] 2407. 조합 (0) | 2022.07.02 |