문제
풀이
모든 과정이 끝났을 때, 카드의 합을 최소화하려면 카드들 중에서 가장 작은 두 카드를 더해야 한다. 이를 위해 우선순위 큐를 사용하여 가장 작은 두 카드를 꺼내어 합을 구하고, 합한 값으로 변한 두 카드를 다시 우선순위 큐에 넣어주면 된다.
코드
import java.util.*
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val (n, m) = br.readLine().split(' ').map { it.toInt() }
val pq = PriorityQueue<Long>()
br.readLine().split(' ').forEach {
pq.add(it.toLong())
}
repeat(m) {
val num = pq.poll() + pq.poll()
pq.add(num)
pq.add(num)
}
var ans = 0L
while (pq.isNotEmpty()) {
ans += pq.poll()
}
bw.write("$ans")
bw.flush()
bw.close()
br.close()
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 3184번: 양 - Kotlin[코틀린] (1) | 2024.04.25 |
---|---|
[백준] 2023번: 신기한 소수 - Kotlin[코틀린] (0) | 2024.04.17 |
[백준] 11441번: 합 구하기 - Kotlin[코틀린] (0) | 2024.04.09 |
[백준] 11047번: 동전 0 - Kotlin[코틀린] (0) | 2024.04.01 |
[백준] 5052번: 전화번호 목록 - Kotlin[코틀린] (0) | 2024.03.27 |