[백준/코틀린] 2805번: 나무 자르기
실버 2
링크
풀이
절단기의 높이를 매개변수로 두고, 가져갈 수 있는 나무의 길이가 M 이상이 되는지 검사합니다.
M 이상을 가져갈 수 있는 절단기의 최대 높이를 h라 하면,
- h보다 낮을 때는 조건을 만족하고,
- h보다 높을 때는 조건을 만족하지 않습니다.
즉, 검증함수가 단조성(Monotonicity)을 가지므로,
매개변수 탐색(Parametric Search)으로 해결할 수 있습니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
lateinit var trees: List<Int>
fun check(mid: Long, k: Int): Boolean {
return k <= trees.sumOf { maxOf(it - mid, 0) }
}
fun main() {
val (n, m) = readln().split(" ").map { it.toInt() }
trees = readln().split(" ").map { it.toInt() }
var low = 0L
var high = Int.MAX_VALUE + 1L
while (low + 1 < high) {
val mid = (low + high) / 2
if (check(mid, m)) low = mid
else high = mid
}
println(low)
}
This post is licensed under CC BY 4.0 by the author.