https://school.programmers.co.kr/learn/courses/30/lessons/43238
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
최소 시간 0 최대시간 ( 가장 오래걸리는 심사관 * 인원수)로
특정하고 2분탐색을 통해서 시간을 찾아 내었다.
calculate method로 시간을 input 하면 output으로 인원수를 return 해주는 method 구현하였고
binarySearch method로 이분탐색 method 구현하였다.
binarySearch method에서 calculate method 호출하여 return 받는 인원수가 n 보다 최소한으로 클때의 순간을 포착하여 완성하였다.
import java.util.*;
class Solution {
//time 들어오면 그 시간에 몇명 가능
private long calculate(int[] times, long time){
long sum = 0;
for(int i = 0 ; i < times.length; i++)
sum += time / times[i];
return sum ;
}
// 시작과 끝이 정해지면 이분탐색
private long binarySearch(int n, int[] times){
Arrays.sort(times);
long end = times[times.length-1] * (long)n;
long start = 0, answer = 0;
while(start <= end){
long mid = (start + end) / 2;
long cal = calculate(times,mid);
if(cal < n){
start = mid + 1;
}else{
end = mid - 1;
answer = mid;
}
}
return answer;
}
public long solution(int n, int[] times) {
long answer = 0;
return binarySearch(n, times);
}
}
'Algorithm & Data Structures > Programers' 카테고리의 다른 글
Lv 3. 디스크 컨트롤러 (1) | 2024.11.11 |
---|---|
Lv 3. 연속 펄스 부분 수열의 합 (0) | 2024.11.07 |
Lv 3. 여행경로 (0) | 2024.11.01 |
Lv 3. 징검다리 건너기 (0) | 2024.10.30 |
Lv 3. 섬연결하기 (2) | 2024.10.28 |