Algorithm/문제풀이_백준
[Swift][이분탐색] 백준 2805번 (나무 자르기)
Joahnee
2022. 5. 24. 09:24
요구능력
이분탐색(upperBound)
문제풀이
이전에 풀었던 랜선자르기와 문제유형이 완전 동일하다.
가져갈 수 있는 나무의 크기를 구하기위해 sum으로 관리해줬다.
자를 수 없는 나무의 경우 mid(톱의 높이)보다 낮은 나무들이기 때문에 i - mid < 0일 경우 continue로 건너뛰었다.
후기
카테고리를 모르고있으면 이문제가 이분탐색인지 어떻게알지😂
코드
import Foundation
let nm = readLine()!.split(separator: " ").map{Int(String($0))!}
let n = nm[0]
let m = nm[1]
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}
let maxArr = arr.max()!
var start = 0
var end = maxArr
while start <= end {
var sum = 0
let mid = (start + end) / 2
for i in arr{
if i - mid < 0{continue}
sum += (i - mid)
}
if sum < m {
end = mid - 1
}else{
start = mid + 1
}
}
print(start - 1)