알고리즘 PS
[Python] 프로그래머스 Lv.02 - 배달
on_doing
2021. 3. 3. 17:01
728x90
programmers.co.kr/learn/courses/30/lessons/12978
코딩테스트 연습 - 배달
5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4
programmers.co.kr
[ 알고리즘 ]
다익스트라 최단거리 알고리즘
[문제 접근]
1에서 출발하여 모든 노드까지의 최단경로를 구하기위해 다익스트라 최단경로 알고리즘을 사용하였음.
힙을 사용하여 매번 최소 경로를 가지고 있는 노드를 반환하는 것이 포인트이다.
[코드]
import sys
import heapq
def solution(N, road, K):
inf = sys.maxsize
answer = 0
List = [[] for i in range(N + 1)]
distance = [inf] * (N + 1)
distance[1] = 0
for i in road:
a = i[0]
b = i[1]
w = i[2]
List[a].append((b, w)) # a에서 b로 가는 최소 거리 w
List[b].append((a,w))
heap = []
heapq.heappush(heap, (0, 1)) # 가중치가 0이고 1을 거쳐서 가는애
while heap:
weight, p = heapq.heappop(heap) # 가중치가 weight이고 p를 거쳐서 가는애
if distance[p] < weight:
continue
for i in List[p]: # p에 연결된 노드의 정보 가져오기
node = i[0] # node까지의 거리 갱신
w = i[1]
cost = weight + w
if cost < distance[node]:
distance[node] = cost
heapq.heappush(heap, (cost, node))
result = [i for i in distance if i <= K]
answer = len(result)
return answer
728x90