programmers.co.kr/learn/courses/30/lessons/43238
이진탐색을 통해서 구함
end = 가장 늦게 처리하는 심사대에 모든 인원이 심사 받는 경우(최대 경우)
mid(심사 걸리는 최소 시간)값을 구하고 해당 시간에 최대로 처리되는 심사인원 수가 n보다 크거나 같으면
mid를 줄이고 아니면 mid를 늘리면서 탐색
import java.util.*;
// 프로그래머스 입국심사 문제
class Solution {
public long solution(int n, int[] times) {
Arrays.sort(times);
long start = 0;
long end = (long) times[times.length - 1] * n;
long answer = end;
long sum;
while(start <= end) {
sum = 0;
long mid = (start + end) / 2;
// 각 심사관이 처리하는 입국자 수
for(int time : times) {
sum += mid / time;
}
// 처리 가능한 입국자 수가 더 많으므로 시간을 줄임
if(sum >= n) {
answer = Math.min(answer, mid);
end = mid - 1;
}else {
start = mid + 1;
}
}
return answer;
}
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 3진법 뒤집기 문제 (자바) (0) | 2021.03.17 |
---|---|
프로그래머스 - 가장 먼 노드 문제 (자바) (0) | 2021.03.16 |
프로그래머스 - 네트워크 문제 (자바) (0) | 2021.03.16 |
프로그래머스 - 단어 변환 문제 (자바) (0) | 2021.03.16 |
프로그래머스 - 여행 경로 문제 (자바) (0) | 2021.03.16 |