Algorithm/BOJ

[BOJ][python] 12851. 숨바꼭질 2

so-so 2022. 7. 4. 20:49
반응형

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)
반응형