-
백준_5972_택배 배송(python)Algorithm/백준_생각정리 2023. 4. 5. 23:55
※ 접근법
문제에서 시작 지점이 주어지고 그 지점에서 최단 거리를 구하는 문제였기 때문에 다익스트라 알고리즘을 떠올렸고
노드의 개수가 최대 오만 개로 많았기 때문에 우선순위 큐를 이용한 다익스트라 알고리즘 문제로 풀어야겠다고 생각했다.
※ 풀이
1. 풀이법은 우선순위 큐를 이용한 다익스트라 구현과 너무 똑같기 때문에 주석으로 코드 한줄 한줄이 무엇을 의미하는지 달아놓겠습니다. (한 가지 틀린점이 있다면 문제에서 양방향이라고 말을 해줬기 때문에 입력받을 때 양방향으로 받았습니다.)
import sys, heapq input = sys.stdin.readline n, m = map(int,input().split()) INF = float("inf") # 무한대 상수 선언 graph = [[] for _ in range(n+1)] # 노드와 노드 사이의 거리를 담을 graph 리스트 선언 distance = [INF] * (n+1) # 처음에는 각 지점의 거리를 무한대로 distance 노드의 갯수만큼 초기화 for i in range(m): # 간선의 갯수만큼 a, b, c = map(int,input().split()) graph[a].append((b,c)) graph[b].append((a,c)) # 노드 위치와 비용순으로 graph에 집어넣습니다. def dijkstra(s): q = [] distance[s] = 0 # 자기자신과의 거리는 0으로 초기화합니다. heapq.heappush(q,(0,s)) # q에 (거리, 위치)를 담습니다. while q: dist, cur = heapq.heappop(q) if distance[cur] < dist: # 이미 계산돼 있는 최솟값보다 크다면 확인할 필요도 없으니 다음 반복으로 넘어갑니다. continue for next in graph[cur]: # 이웃돼 있는 노드를 확인합니다. cost = dist + next[1] # dist 출발 지점에서 현재 노드까지의 거리 + 현재 노드에서 다음 노드까지의 거리 if cost < distance[next[0]]: # 이미 계산돼 있는 최솟값이 더 작았다면 갱신해줍니다. distance[next[0]] = cost heapq.heappush(q,(cost, next[0])) # 새로운 최솟값을 q에 넣고 다음 반복을 진행해줍니다. return distance[n] print(dijkstra(1))
※ 회고
느리더라도 꾸준하게
'Algorithm > 백준_생각정리' 카테고리의 다른 글
백준_6198_옥상 정원 꾸미기(python) (0) 2023.04.07 백준_2116_주사위 쌓기(python) (0) 2023.04.06 백준_16564_히오스 프로게이머(python) (0) 2023.03.30 백준_17836_공주님을 구해라!(python) (0) 2023.03.20 백준_15683_감시 (python) (0) 2023.03.17