function solution(n, times) {
    let answer = 0;
    const slowestTime = Math.max(...times);   // 최악의 경우를 상정하기 위해 가장 느린 심사관의 소요시간 확인
    let left = 0;
    let right = n * slowestTime;            // 최악의 경우 해당 시간만큼 걸림

    // 이진 탐색
    while(left <= right){
        const mid = Math.floor((left + right) / 2);   // left와 right의 중간값 설정
        let sum = 0;    // 심사할 인원

        // 각 심사관 별로 주어진 시간(mid) 안에 심사할 수 있는 인원 sum
        for(let item in times){
            sum = sum + Math.floor(mid / times[item]);
        }

        if(sum < n){    // 심사 대상을 전부 처리하지 못한 경우
            left = mid + 1;
        } else{         // 심사 대상보다 많은 대상을 심사한 경우
            right = mid - 1;
            answer = mid;
        }
    }

    return answer;
}

댓글남기기