안녕하세요. 모카의 머신러닝 입니다. 이번 포스팅에서는 백준 알고리즘 문제 풀이에 대해 포스팅하도록 하겠습니다.
코드는 이곳을 참고했음을 밝힙니다.
1. Graph (다익스트라)
백준1753번
https://www.acmicpc.net/problem/1753
import sys
input = sys.stdin.readline
from queue import PriorityQueue
V, E = map(int, input().split())
K = int(input())
distance = [sys.maxsize] * (V+1)
visited = [False] * (V+1)
myList = [[] for _ in range(V+1)]
q = PriorityQueue()
for _ in range(E):
u, v, w = map(int, input().split())
myList[u].append((v, w))
q.put((0, K))
distance[K] = 0
while q.qsize() > 0:
current = q.get()
c_v = current[1]
if visited[c_v]:
continue
visited[c_v] = True
for tmp in myList[c_v]:
next = tmp[0]
value = tmp[1]
if distance[next] > distance[c_v] + value:
distance[next] = distance[c_v] + value
q.put((distance[next], next))
for i in range(1, V+1):
if visited[i]:
print(distance[i])
else:
print("INF")
백준 1916번
https://www.acmicpc.net/problem/1916
import sys
from queue import PriorityQueue
input = sys.stdin.readline
N = int(input())
M = int(input())
myList = [[] for _ in range(N + 1)]
dist = [sys.maxsize] * (N + 1)
visit = [False] * (N + 1)
for _ in range(M):
start, end, weight = map(int, input().split())
myList[start].append((end, weight))
start_idnex, end_index = map(int, input().split())
def dijkstra(start, end):
pq = PriorityQueue()
pq.put((0, start))
dist[start] = 0
while pq.qsize() > 0:
nowNode = pq.get()
now = nowNode[1]
if not visit[now]:
visit[now] = True
for n in myList[now]:
if dist[n[0]] > dist[now] + n[1]:
dist[n[0]] = dist[now] + n[1]
pq.put((dist[n[0]], n[0]))
return dist[end]
print(dijkstra(start_idnex, end_index))
백준 1854번
https://www.acmicpc.net/problem/1854
import sys
import heapq
input = sys.stdin.readline
N, M, K = map(int, input().split())
W = [[] for _ in range(N+1)]
distance = [[sys.maxsize] * K for _ in range(N+1)]
for _ in range(M):
a, b, c = map(int, input().split())
W[a].append((b, c))
pq = [(0, 1)]
distance[1][0] = 0
while pq:
cost, node = heapq.heappop(pq)
for nNode, nCost in W[node]:
sCost = cost + nCost
if distance[nNode][K-1] > sCost:
distance[nNode][K-1] = sCost
distance[nNode].sort()
heapq.heappush(pq, [sCost, nNode])
for i in range(1, N+1):
if distance[i][K-1] == sys.maxsize:
print(-1)
else:
print(distance[i][K-1])
지금까지 백준 알고리즘 그래프 4 다익스트라 부분이었습니다.
읽어주셔서 감사합니다. 😃