class Solution {
public long solution(int n, int[] times) {
long maxTime=0;
for (int time : times) {
maxTime=Math.max(maxTime,time);
}
long right=maxTime*n/times.length;
long answer = right;
long left=0;
while (left<=right){
long mid=(left+right)/2;
long sum=0;
for (int i = 0; i < times.length; i++) {
sum+=mid/times[i];
}
if(n<=sum){
answer=Math.min(answer,mid);
right=mid-1;
}else left=mid+1;
}
return answer;
}
}
무난한 이분 탐색 문제였다.
다만, 조건에서 n, time모두 10억 까지 가능하므로 무작정 이 둘을 곱하게되면 overflow가 발생한다.
그렇기에 이론적으로 가능한 최대 시간을 계산해서 right로 설정해야 한다.
이론적으로는, time배열 중 가장 큰 값을 바탕으로 n명을 받는 시간을 심사관의 수로 나눈 시간이 최대 값이 된다.
여튼, 이렇게 overflow만 발생되지 않게 해주면 가볍게 맞출 수 있는 문제였다.
'Algorithm > Programmers' 카테고리의 다른 글
[Lv.3] 스타 수열 -자바 (0) | 2023.07.07 |
---|---|
[Lv.3] 기둥과 보 설치 - 자바 (0) | 2023.07.07 |
[Lv.3] 단속카메라-자바 (0) | 2023.07.05 |
[Lv.3] 금과 은 운반하기 - 자바 (0) | 2023.07.05 |
[Lv.3!] 보석 쇼핑 -자바 (0) | 2023.05.29 |