https://school.programmers.co.kr/learn/courses/30/lessons/43238
문제 설명
n 사람들이 이민을 위해 줄을 서고 있습니다.
심사에 소요되는 시간은 각 출입국심사대 심사관에 따라 다릅니다.
처음에는 모든 심판이 비어 있습니다.
심사위원 테이블에서는 한 명의 심사위원만 심사를 받을 수 있습니다.
앞에 서 있는 사람은 빈 심사대에 가서 심사를 받을 수 있습니다.
다만, 더 일찍 마감하는 심사위원이 있는 경우에는 기다렸다가 심사를 받으러 가실 수 있습니다.
우리는 모든 사람을 평가하는 데 걸리는 시간을 최소화하고자 합니다.
n을 입력하기 위해 대기하는 사람의 수가 주어졌을 때 모든 사람이 이민국을 통과하는 데 걸리는 시간의 최소값을 반환하는 솔루션 함수를 작성하고 각 검사관이 사람을 검사하는 데 필요한 시간을 배열에 곱합니다.
매개변수.
제한
- 이민을 기다리는 사람들의 수는 1에서 1,000,000,000까지 다양합니다.
- 각 심사관이 개인을 검사하는 데 걸리는 시간은 1분에서 1,000,000,000분 사이입니다.
- 리뷰어의 수는 1명 이상 100,000명 이하입니다.
I/O 예시
I/O 예시
N | 시간 | 돌려 주다 |
6 | (7, 10) | 28 |
설명
중간: 판단할 시간
합계: 심사위원 수
상단에 평균과 합계가 있는 두 부분으로 구성된 검색을 수행합니다.
자세한 내용은 코드 주석에 있습니다.
암호
import java.util.Arrays;
class Solution {
public long solution(int n, int() times) {
Arrays.sort(times);
long answer = 0;
long start = 0;
long end = (long) n * times(times.length - 1);
long sum, mid;
while (start <= end) {
mid = (start + end) / 2;
sum = 0;
for (int i = 0; i < times.length; i++) // 주어진 시간동안 몇명 심사할 수 있는지 계산
sum += mid / times(i);
if (n > sum){ // 심사를 다 못한경우
start = mid + 1;
}
else{ //심사를 다한 경우 시간을 줄여서 다시 심사해 본다
end = mid - 1;
answer = mid;
}
}
return answer;
}
}