문제
15903번: 카드 합체 놀이
첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,
www.acmicpc.net
풀이
모든 과정이 끝났을 때, 카드의 합을 최소화하려면 카드들 중에서 가장 작은 두 카드를 더해야 한다. 이를 위해 우선순위 큐를 사용하여 가장 작은 두 카드를 꺼내어 합을 구하고, 합한 값으로 변한 두 카드를 다시 우선순위 큐에 넣어주면 된다.
코드
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 |