Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬
- 투포인터예제
- mysql
- 코딩테스트유형
- 파이썬백준
- 프로그래머스
- 코테유형
- blob다운로드오류
- 백준
- blobcontainer
- BLOB
- blob파일업로드
- 코테
- sql풀이
- 프로그래머스SQL
- export to excel
- c#blob
- blob파일다운로드
- 알고리즘
- 코딩테스트
- 취업코데
- queryasync
- c# 엑셀추출
- frontend
- asp.net
- sql
- 프로그래머스MYSQL
- sql server 포트번호
- C#
- 로컬포트번호
Archives
- Today
- Total
개발새발
알고리즘 :: 다익스트라(그래프 이론) 예제 1916 파이썬 본문
다익스트라 알고리즘은 그래프 이론에서 주어진 시작 정점에서 모든 다른 정점까지의 최단 경로를 찾는 알고리즘으로, 가중치가 있는 그래프에서 최단 경로를 찾는 문제를 해결하는 데 사용됩니다. (그래프 이론 + dp)
다익스트라 알고리즘 개요
다익스트라 알고리즘은 다음과 같은 단계로 동작합니다:
- 출발 노드 선택: 시작 노드를 선택하고, 시작 노드의 최단 경로를 0으로 초기화합니다.
- 우선순위 큐 활용: 출발 노드부터 갈 수 있는 모든 경로를 우선순위 큐(힙)에 넣습니다. 시작 노드의 최단 경로가 0이므로 시작 노드를 우선순위 큐에 넣습니다.
- 최단 경로 갱신: 우선순위 큐에서 최소 비용의 노드를 꺼내서 해당 노드에서 갈 수 있는 모든 노드들의 최단 경로를 갱신합니다. 이 때, 기존 경로보다 더 짧은 경로를 발견하면 해당 노드의 최단 경로를 갱신하고 우선순위 큐에 추가합니다.
- 목적지 도달: 우선순위 큐에서 목적지 노드에 도달하면 해당 노드의 최단 경로를 반환합니다.
백준 1916 :: 문제 해결 방법
주어진 문제에서는 다음과 같은 단계로 다익스트라 알고리즘을 적용할 수 있습니다:
- 입력으로 주어지는 도시의 개수 N과 버스의 개수 M을 받습니다.
- 각 버스의 정보를 인접 리스트 형태로 저장합니다. 이 때, 각 도시에서 다른 도시로 가는 데 필요한 비용을 저장합니다.
- 출발점에서 도착점까지의 최소 비용을 구해야 하므로 다익스트라 알고리즘을 사용합니다. 출발점에서부터 다른 모든 도시까지의 최소 비용을 계산합니다.
- 다익스트라 알고리즘을 통해 구한 최소 비용 중 도착점의 비용을 출력합니다.
from heapq import heappush, heappop
import sys
input = sys.stdin.read
n = int(input().strip())
m = int(input().strip())
table = [[] for _ in range(n + 1)]
for _ in range(m):
s, e, c = map(int, input().strip().split())
table[s].append((e, c))
s, e = map(int, input().strip().split())
def dijkstra(s, table):
INF = float('inf')
dp = [INF] * (n + 1)
dp[s] = 0
q = []
heappush(q, (0, s)) # (비용, 노드)
while q:
current_cost, current_node = heappop(q)
if dp[current_node] < current_cost:
continue
for next_node, next_cost in table[current_node]:
new_cost = current_cost + next_cost
if new_cost < dp[next_node]:
dp[next_node] = new_cost
heappush(q, (new_cost, next_node))
return dp
result = dijkstra(s, table)
print(result[e])
'코딩테스트 > 알고리즘' 카테고리의 다른 글
크루스칼 알고리즘 :: 백준 1197 파이썬 (0) | 2024.06.26 |
---|---|
코딩테스트 자주 출제되는 알고리즘 유형, 각 알고리즘 별 문제 접근 방법 (0) | 2024.06.24 |
알고리즘 :: 투포인터 예제 백준 1806 파이썬 (0) | 2024.06.23 |
Comments