본문 바로가기
문제 풀이/백준(BOJ)

[Python] 백준 1446번 : 지름길

by 희조당 2023. 1. 31.
728x90

https://www.acmicpc.net/problem/1446

 

1446번: 지름길

첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이

www.acmicpc.net


💡 문제 풀이

다익스트라 문제이다. 그리디로도 풀 수 있을 것 같다.

 

다익스트라 알고리즘을 구현할 줄 알고, 알고리즘을 적용할 노드를 어떻게 설정할지 고민해야 한다.

일반적인 문제와 다르게 특정 노드가 주어지지 않아 고속도로의 길이만큼 노드가 주어졌다고 생각해야 한다.

✔️ 느낀 점

오랜만에 다익스트라 문제를 풀어보기 위해서 쉬운 문제로 갔는데 생각보다 쉽게 접근이 되지 않았다.

파이썬 문법도 낯설어서 조금 애 먹은 것 같다. 대략 한 시간 정도..

처음에는 그리디로 접근했는데 다익스트라로 풀어보려고 했다.

💻 코드

import sys, heapq
input = sys.stdin.readline
INF = int(1e9)

n, d = map(int, input().split())
graph = [[] for _ in range(d+1)]

for i in range(d):
    graph[i].append([i+1, 1])

for _ in range(n):
    start, end, cost = map(int, input().split())
    if end <= d: 
        graph[start].append([end, cost])

distance = [INF] * (d + 1)
distance[0] = 0
queue = []
heapq.heappush(queue, [0, 0])

while queue:
    currentCost, currentNode = heapq.heappop(queue)
    
    if distance[currentNode] < currentCost: continue
    
    for nextNode, nextCost in graph[currentNode]:
        newCost = nextCost + currentCost
        if newCost < distance[nextNode]:
            distance[nextNode] = newCost
            heapq.heappush(queue, [newCost, nextNode])
            
print(distance[-1])

댓글