본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 1654 : 랜선 자르기

by 개발하는 곰돌이 2022. 12. 3.

문제 링크

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net



문제 해설

2805 - 나무 자르기와 유사한 이진 탐색 문제다. 차이점은 목표치와 동일하면 바로 종료할 수 있던 나무 자르기와 달리 이 문제는 목표치(필요한 랜선의 개수)에 도달하더라도 랜선의 길이를 최대로 하기 위해 계속 검사를 해야한다는 점이다. 


Code

fun main() = with(System.`in`.bufferedReader()) {
    val (k, n) = readLine().split(' ').map { it.toInt() }
    val cable = LongArray(k) { readLine().toLong() }
    var start = 0L
    var end = cable.maxOrNull()!! + 1
    while (start + 1 < end) {
        var lan = 0L
        val length = (start + end) / 2
        for (c in cable) {
            lan += c / length
        }

        if (lan >= n) start = length
        else end = length
    }
    println(start)
}

'Algorithm > BOJ' 카테고리의 다른 글

[Kotlin] 백준 5430 : AC  (1) 2022.12.04
[Kotlin] 백준 7662 : 이중 우선순위 큐  (1) 2022.12.04
[Kotlin] 백준 1874 : 스택 수열  (0) 2022.12.02
[Kotlin] 백준 2108 : 통계학  (0) 2022.12.02
[Kotlin] 백준 4949 : 균형잡힌 세상  (1) 2022.12.02

댓글