쥐수의 공부노트

백준 2805번 나무 자르기 본문

swift 알고리즘/이분 탐색

백준 2805번 나무 자르기

쥐수 2023. 8. 16. 16:12
728x90

정답 :

let input = readLine()!.split(separator: " ").map{Int($0)!}

let n = input[0]
let m = input[1]

let array = readLine()!.split(separator: " ").map{Int($0)!}.sorted()

var st = 0
var ed = array[n-1]

func solve(x : Int) -> Bool {
    var cur = 0
    for i in 0..<n {
        if array[i] > x {
            cur += array[i] - x
        }
        else {
            continue
        }
    }
    return cur >= m
}

while st < ed {
    var mid = (st + ed + 1) / 2
    if solve(x: mid) {
        st = mid
    } else {
        ed = mid - 1
    }
}
print(st)

해당 문제는 전선 자르기 문제와 비슷하다.

 

하지만, st를 1이 아닌 0으로 설정해야 정답이 되었다.  1로 설정했을 경우, 반례가 나타나는 듯 하다.

 

728x90