PS(Problem Solving)/BOJ

[백준/BOJ] 5972번: 택배 배송

JunsuKim 2022. 9. 7.
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

댓글