https://programmers.co.kr/learn/courses/30/lessons/43238
function solution(n, times) {
var answer = Infinity;
times = times.sort((a, b) => a - b); // 오름차순 정렬
let left = 1;
let right = times[times.length - 1] * n;
// 이분탐색 시작
while (left <= right) {
let cnt = 0;
let mid = parseInt((left + right) / 2);
// 조건에 맞는 mid인지 검사
for (let i = 0; i < times.length; i++) {
cnt += parseInt(mid / times[i]);
}
if (cnt >= n) {
right = mid - 1;
answer = Math.min(answer, mid);
} else {
left = mid + 1;
}
}
return answer;
}
✔ 알고리즘 : 이분탐색
✔ 심사관마다 걸리는 시간인 times 배열 오름차순 정렬
✔ left=1, right= 제일오래걸리는 심사관한테 모두가 검사받는 시간
✔ 이분탐색을 진행하며 mid를 times[i]로 나눈값의 합이 현재 mid시간으로 검사할 수 있는 사람의 수이다.
✔ 사람의 수(cnt)가 n보다 큰 경우는 답에 맞는 조건이므로 answer과 비교하여 작으면 갱신
✔ 난이도 : 프로그래머스 기준 LEVEL 3