import heapq
import sys
def solution(N, road, K):
answer = 0
arr = [[]for _ in range(N+1)]
for a, b, time in road:
arr[a].append((time, b))
arr[b].append((time, a))
visited = [sys.maxsize] * (N+1)
dijkstra(arr, visited)
return len([x for x in visited if x <= K])
def dijkstra(arr, visited):
q = []
heapq.heappush(q, (0, 1))
visited[1] = 0
while q:
cost, node = heapq.heappop(q)
if visited[node] > cost:
continue
for ncost, nnode in arr[node]:
temp = cost + ncost
if visited[nnode] > temp:
visited[nnode] = temp
heapq.heappush(q, (temp, nnode))
최단거리, 다익스트라
1. 인접 리스트로 변환을 하고 visited를 최대 크기로 설정 (visited : 각 노드까지 가는데 걸리는 최소 시간)
2. 다익스트라 (1에서 시작)
- node에 연결된 다른 노드들과의 최소 비용을 업데이트
- heap에 push
- 반복
3. 각 노드까지의 최소 시간이 K이하인 값의 개수를 리턴
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv2 - 2개 이하로 다른 비트 (파이썬) (0) | 2022.04.06 |
---|---|
[프로그래머스] Lv2 - 피로도 (파이썬) (0) | 2022.04.06 |
[프로그래머스] Lv2 - 괄호 회전하기 (파이썬) (0) | 2022.04.05 |
[프로그래머스] Lv2 - 순위 검색 (파이썬) (0) | 2022.04.05 |
[프로그래머스] Lv2 - 예상 대진표 (파이썬) (0) | 2022.04.05 |