문제출처
function solution(n, times) {
var answer = 0;
let left = 0;
let right = 100000000000000;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
let sum = 0;
for (const time of times) {
sum += Math.floor(mid / time);
}
if (sum >= n) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
변수
right
의 초기값 = 기다리는 사람수 * 심사위원수
mid
: 모든 사람이 심사를 받는데 걸리는 시간 (return값 찾기)
sum
: mid라는 시간동안 통과할 수 있는 사람 수
풀이
- n = 6, 심사위원 = [7, 10] 이라고 하자
- 현재 mid = 50이면
- sum은 50 / 7 = 7 + 50 / 10 = 5 => 12로 50분동안 2명의 심사위원은 총 12명의 사람을 심사할 수 있다.
- 12라는 값은 6보다 크기 때문에 right값을 줄여준다.
- 이런식으로 left <= right 일때까지 left와 right값을 바꿔주고 최소값인 left를 return한다.