Koala - 15기/코딩테스트 준비 스터디

[백준/Python] #13549 숨바꼭질3

영찬_ 2024. 8. 15. 14:34

https://www.acmicpc.net/problem/13549

  • Algorithm

점의 위치는 0~ 100000내에 존재하므로, 그래프를 생각했을 때 1~50000까지의 그래프 배열에는 2배를 한 위치로 이동할때 cost가 없고, 0~100000까지는 +1, -1칸 까지 이동할때는 cost가 1이 발생하도록 설정하여 다익스트라를 쓰면 된다고 생각했다.

위 사진처럼 그래프를 구성하였고, 시작점을 수빈이가 있는 위치로해서 distance배열계산을 하고, 동생의 위치를 출력해주면 된다.

  • Code
import sys
import heapq
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
BOUND = 100000

n,k = map(int,input().split())

INF = int(1e9)
graph = [[] * (BOUND+1) for _ in range(BOUND+1)]
distance = [INF] * (BOUND+1)

for i in range(BOUND+1):
    if i > 0:
        graph[i].append((i-1,1))
    if i < BOUND:
        graph[i].append((i + 1, 1))
    if i*2 > BOUND:
        continue
    graph[i].append((i*2,0))

def dijkstra(start,distance,graph):
    q = []
    heapq.heappush(q, (0, start))
    distance[start] = 0

    while q:
        dist, now = heapq.heappop(q)
        if distance[now] < dist:
            continue
        for i in graph[now]:
            cost = dist + i[1]
            if cost < distance[i[0]]:
                distance[i[0]] = cost
                heapq.heappush(q, (cost, i[0]))

dijkstra(n,distance,graph)

print(distance[k])