문제링크
import kotlin.math.min
fun main() {
val bufferedReader = System.`in`.bufferedReader()
val bufferedWriter = System.out.bufferedWriter()
val (n, m) = bufferedReader.readLine().split(" ").map { it.toInt() }
val numbers = bufferedReader.readLine().split(" ").map { it.toInt() }
var left = 0
var right = numbers.maxOf { it }
var answer = Int.MAX_VALUE
while (left <= right) {
val mid = (left + right) / 2
if (getSections(mid, numbers) <= m) {
right = mid - 1
answer = min(answer, mid)
} else {
left = mid + 1
}
}
bufferedWriter.write("$answer")
bufferedReader.close()
bufferedWriter.close()
}
fun getSections(mid: Int, numbers: List<Int>): Int {
var low = numbers[0]
var high = numbers[0]
var sections = 1
for (number in numbers) {
if (number < low) low = number
if (number > high) high = number
if (high - low > mid) {
sections++
low = number
high = number
}
}
return sections
}
주석 없는 코드를 만들기 위해 노력하는 개발자입니다.
혹시라도 의도가 분명하지 않아보이는 (이해가 되지 않는) 코드가 있으시다면 편하게 답변 달아주시면 정말 감사하겠습니다.