[문제 내용]
심사관이 한명을 심사하는데 걸리는 시간들이 주어지고 n명까지 처리하는데 걸리는 최소 시간을 구하시오.
[example 1]
n | times | return |
---|---|---|
6 | [7,10] | 28 |
[해결 방법]
하.. 진짜 이문제를 어떻게 이분탐색해서 풀라고 이분탐색 카테고리에 들어가 있는건지
이해를 못하고 한 삼십분은 헤맸던것 같다..
관점을 뒤집는게 이렇게 힘들다..
이분탐색해서 푸는 방법은
대충 걸리는 시간(middle)을 정해서
그 시간안에 최대 몇명을 처리 할 수 있는 구하고
그 구한 값이 n에 해당하는 지 찾으면 되는 거다!
최대값으로는 일단 가장 적은 시간으로 n명을 처리할때 걸리는 시간으로 설정하고,
최소값으로는 그냥 가장 적은 시간으로 설정한다.
class Solution {
fun solution(n: Int, times: IntArray): Long {
var answer: Long = Long.MAX_VALUE
var max = times.min()!! * n.toLong()
var min = times.min()!!.toLong()
while(min <= max) {
var can = 0L
val middle = (max + min) / 2
for(time in times) {
can += middle/time
if(can >= n) {
answer = middle
max = middle -1
break
}
}
if(can < n) {
min = middle + 1
}
}
return answer
}
}