[백준] 랜선 자르기 (1654)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 후 K줄에 걸쳐 이미 가지고 있는 각 랜선의 길이가 센티미터 단위의 정수로 입력된다. 랜선의 길이는 231-1보다 작거나 같은 자연수이다.
» 출력
첫째 줄에 N개를 만들 수 있는 랜선의 최대 길이를 센티미터 단위의 정수로 출력한다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
4 11 802 743 457 539 |
200 |
문제 힌트
802cm 랜선에서 4개, 743cm 랜선에서 3개, 457cm 랜선에서 2개, 539cm 랜선에서 2개를 잘라내 모두 11개를 만들 수 있다.
문제 풀이1
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val (k, n) = readLine().split(" ").map { it.toInt() }
val cables = mutableListOf<Long>()
repeat(k) {
cables.add(readLine().toLong())
}
cables.sort()
var max = cables[k - 1]
var min = 1L
var middle = 0L
while (max >= min) {
middle = (max + min) / 2
var count = 0L
for (i in cables.indices) {
count += cables[i] / middle
}
if (count >= n) min = middle + 1
else max = middle - 1
}
println(max)
}
Debug1