ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค [lv2] ๋ฐฐ๋‹ฌ ํŒŒ์ด์ฌ

2021. 7. 28. 08:05ใ†๐Ÿ”ฑ Algorithm

 ๋…ธ๋“œ ๊ฐ„์˜ ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋ฅผ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 

1๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ, heap ํ˜น์€ deque ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๐ŸŽ  heap ์„ ์‚ฌ์šฉํ•œ ํ’€์ด

import heapq


def solution(N, road, K):

    distance = [float('inf')] * (N + 1)
    adj = [[] for _ in range(N + 1)]

    for r in road:
        adj[r[0]].append([r[2], r[1]])
        adj[r[1]].append([r[2], r[0]])

    distance[1] = 0
    heap = []
    heapq.heappush(heap, [0, 1])
    while heap:

        cost, node = heapq.heappop(heap)
        for c, n in adj[node]:
            if distance[n] > cost + c:
                distance[n] = cost + c
                heapq.heappush(heap, [distance[n], n])
    return len([i for i in distance if i <= K])

์œ„ ํ’€์ด๋Š” ์ตœ์†Œ heap ์„ ์‚ฌ์šฉํ•œ๋‹ค.

10 ~ 11 ๋ผ์ธ์—์„œ, r[2] ๊ฐ€ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋กœ append ๋˜๋Š”๋ฐ, ์ด๋Š” r[2] ๊ฐ€ distance ๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์šฐ๋ฆฌ๋Š” ์ตœ์†Œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ๋ฆฌ์— ํ•ด๋‹น๋˜๋Š” r[2] ๋ฅผ ์ตœ์†Œ heap ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž์— ๋„ฃ๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค.

 

๐ŸŒŠ  deque ์„ ์‚ฌ์šฉํ•œ ํ’€์ด

from collections import deque


def solution(N, road, K):
    adjacent = dict()
    distance = {i: float('inf') if i != 1 else 0 for i in range(1, N + 1)}
    for n1, n2, d in road:
        adjacent[n1] = adjacent.get(n1, []) + [(n2, d)]
        adjacent[n2] = adjacent.get(n2, []) + [(n1, d)]

    que = deque([1])
    while que:
        cur_node = que.popleft()
        for n2, d in adjacent[cur_node]:
            if distance[n2] > distance[cur_node] + d:
                distance[n2] = distance[cur_node] + d
                que.append(n2)

    return len([i for i in distance.values() if i <= K])

deque ๊ณผ dictionary ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

dictionary ์˜ get() ๋ฉ”์†Œ๋“œ๋ฅผ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” key๊ฐ€ dictionary์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—”, get() ์˜ 2๋ฒˆ์งธ ์ธ์ž๋ฅผ value ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.

 

๐ŸŒ€  ์‹œํ–‰์ฐฉ์˜ค

deque์„ ์‚ฌ์šฉํ•œ ํ’€์ด ๋งˆ์ง€๋ง‰ ๋ผ์ธ์—์„œ, distance ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ for ๋ฌธ์œผ๋กœ ๋Œ๋ฆด ๋•Œ, distance.values() ๊ฐ€ ์•„๋‹Œ distance ์ž์ฒด๋ฅผ ๋„ฃ์—ˆ๋‹ค. ๊ฑฐ๋ฆฌ๊ฐ’(value) ์ด ์•„๋‹Œ ๋…ธ๋“œ (key) ๊ฐ’์ด ๋“ค์–ด๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ์—‰๋šฑํ•œ ๋‹ต์ด ๋‚˜์™”๋‹ค.