이분 탐색을 통해 심사관이 심사 가능한 최대 사람의 수를 구할 수 있다. 입국 심사가 가능한 가장 작은 시간을 찾자.
middle
을 최솟값 0 ~ 최댓값 (가장 시간이 많이 드는 입국 심사 시간 * 전체 사람의 수)을 사용해 구할 수 있다. 심사관 한 명이 사용 가능한 시간 middle
을 한 명을 심사하는 데 걸리는 time
으로 나눈 몫이 곧 그 심사관이 심사 가능한 최대 사람의 수다.import Foundation
func solution(_ n:Int, _ times:[Int]) -> Int64 {
var times = times
times.sort(by: <)
var left = 0
var right = times.last! * n
var result = 0
while left <= right {
let middle = (left + right) / 2
var people = 0
for time in times {
people += middle / time
if people >= n {
break
}
}
if people >= n {
right = middle - 1
result = middle
} else {
left = middle + 1
}
}
return Int64(result)
}