728x90
문제
https://www.acmicpc.net/problem/5972
5972번: 택배 배송
농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는
www.acmicpc.net
해설
전형적인 다익스트라 알고리즘 문제이다.
다익스트라 알고리즘을 통해 1번 헛간에서 시작하여 마지막 헛간에 도착했을 때의 최소 비용을 구해 출력하면 된다.
다익스트라 알고리즘을 잘 모른다면 이 글을 읽어보는 것을 추천한다.
코드
import java.util.*
import kotlin.collections.ArrayList
private lateinit var graph: Array<ArrayList<Pair<Int, Int>>>
private lateinit var cost: IntArray
private const val INF = 50000000
data class BarnInfo(val barn: Int, val cost: Int): Comparable<BarnInfo> {
override fun compareTo(other: BarnInfo): Int = cost - other.cost
}
fun main() = with(System.`in`.bufferedReader()) {
val (barnCnt, roadCnt) = readLine().split(" ").map { it.toInt() }
graph = Array(barnCnt + 1) { ArrayList() }
cost = IntArray(barnCnt + 1) { INF }
repeat(roadCnt) {
val (from, to, cost) = readLine().split(" ").map { it.toInt() }
graph[from].add(Pair(to, cost))
graph[to].add(Pair(from, cost))
}
dijkstra()
println(cost[barnCnt])
}
private fun dijkstra() {
cost[1] = 0
val pq = PriorityQueue<BarnInfo>()
pq.add(BarnInfo(1, 0))
while(pq.isNotEmpty()) {
val cur = pq.poll()
val curBurn = cur.barn
val curCost = cur.cost
for(i in graph[curBurn]) {
val nextBurn = i.first
val nextCost = curCost + i.second
if(cost[nextBurn] > nextCost) {
cost[nextBurn] = nextCost
pq.add(BarnInfo(nextBurn, nextCost))
}
}
}
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 2467번: 용액 (2) | 2022.09.09 |
---|---|
[백준/BOJ] 13904번: 과제 (0) | 2022.09.09 |
[백준/BOJ] 13424번: 비밀 모임 (0) | 2022.09.07 |
[백준/BOJ] 15644번: 구슬 탈출 3 (1) | 2022.09.06 |
[백준/BOJ] 13459번: 구슬 탈출 (0) | 2022.09.05 |
댓글