[프로그래머스] 입국심사
https://school.programmers.co.kr/learn/courses/30/lessons/43238
총 걸리는 시간
을 기준으로 이진 탐색
을 한다.목표 인원(n)보다 더 적게 처리
한다면 시간이 더 필요
하다는 뜻이다.left = mid + 1
목표 인원(n)보다 더 많게 처리
하거나 딱 맞게 처리
할 수 있다면 시간을 더 줄여도 된다
는 뜻이다.right = mid - 1
import java.util.*;
public long solution(int n, int[] times) {
long answer = 0;
Arrays.sort(times); // 심사관 별 걸리는 시간 정렬
long left = 0;
long right = times[times.length - 1] * (long) n; // 모든 심사를 끝내는 데 가장 오래 걸리는 시간
while (left <= right) {
long mid = (left + right) / 2; // 현재 확인할 모든 심사를 끝내는 시간
long sum = 0; // 몇 명 처리할 수 있는지 저장할 배열
// 현재 총 걸리는 시간을 각 심사위원이 걸리는 시간으로 나눠서 몇 명 심사할 수 있는지 구하기
for (int i = 0; i < times.length; i++) {
sum += mid / times[i];
}
// 현재 시간으로는 목표 인원보다 더 적게 처리 -> 시간 더 필요
if (sum < n) {
left = mid + 1;
}
// 현재 시간으로는 목표 인원보다 더 많게 처리하거나 딱 맞게 처리 가능 -> 시간 더 줄여도 됨
else {
right = mid - 1;
answer = mid;
}
}
return answer;
}