쥐수의 공부노트

백준 1654번 랜선 자르기 본문

바킹독 알고리즘/이분 탐색

백준 1654번 랜선 자르기

쥐수 2023. 8. 16. 15:57
728x90

정답 :

let input = readLine()!.split(separator: " ").map{Int($0)!}
let k = input[0]
let n = input[1]
var st = 1
var ed = 0x7fffffff
var array = [Int]()
for _ in 0..<k {
    let line = Int(readLine()!)!
    array.append(line)
}

func solve(x : Int) -> Bool {
    var cur = 0
    for i in 0..<k {
        cur += array[i] / x
    }
    return cur>=n
}
while st < ed {
    var mid = (st + ed + 1) / 2
    if solve(x: mid) {
        st = mid
    } else {
        ed = mid - 1
    }
}

print(st)

해당 문제는 위의 그래프를 전적으로 이용한다.

 

개수에 가장 가까운 수를 찾으면 되는 부분이다. 따라서 우리는 st를 1로 ed 를 최대의 정수로 진행하여 그 중간값을 대입하여 N개의 개수가 나오는지 확인하면 된다.

728x90

'바킹독 알고리즘 > 이분 탐색' 카테고리의 다른 글

백준 1920번 수 찾기  (0) 2023.08.11