알고리즘/프로그래머스문제풀이
[Python/프로그래머스]배달_다익스트라
개발자 덕구🐾
2022. 9. 22. 13:26
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12978
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🐾 20221014
전형적인 다익스트라 문제 + 리스트 돌면서 k보다 작은 수 구해 return 하면 된다.
이 문제는 양방향이다!!
양방향인지 단방향인지 잘 보고 해야한다.
코드 :
import heapq
def dijkstra(distance,mp) :
q = []
# dist는 0, node 시작 번호는 1
heapq.heappush(q,[0,1])
distance[1] = 0
while q :
dist, node = heapq.heappop(q)
# 이미 저장되어 있는 값보다 크면 볼필요 없음
if distance[node] < dist : continue
# 지금 노드에서 갈 수 있는 노드를 모두 탐색
for i in mp[node] :
cost = dist + i[1]
# 지금 노드를 거쳐서 가는 값이 원래 값보다 작으면
if distance[i[0]] > cost :
# 갱신
distance[i[0]] = cost
heapq.heappush(q,[cost,i[0]])
def solution(N, road, K):
answer = 0
distance = [int(1e9)] * (N+1)
mp = [[] for _ in range(N+1)]
for u,v,w in road :
mp[u].append([v,w])
mp[v].append([u,w])
dijkstra(distance,mp)
for i in range(1,N+1) :
if distance[i] <= K : answer+=1
return answer
참고할 내 포스팅 :
https://what-am-i.tistory.com/400
[Python]다익스트라_최단경로알고리즘 (feat. heap)
다익스트라는 그리디와 DP의 유형으로 분류되는 최단경로 알고리즘이다. DP는 계속해서 그래프를 갱신하기 때문이고 그리디는 그 순간 가장 짧은 정점을 선택하기 때문이다. 음의 가중치가 적용
what-am-i.tistory.com
반응형