ALGORITHM/PROGRAMMERS
[프로그래머스] 입국심사
0298
2021. 8. 30. 11:30
https://programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
2021-08-30
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
static long solution(int n, int[] times) {
long answer = 0;
Arrays.sort(times);
long left = 1;
long right = n * (long) times[times.length - 1];
while(left <= right) {
long mid = (left + right) >> 1;
long cnt = 0;
for (int time : times) {
cnt += (mid / time);
}
if(cnt >= n) {
right = mid - 1;
answer = mid;
}
else left = mid + 1;
}
return answer;
}
|
cs |
#문제풀이
이분탐색 문제.
1) left는 1로 잡고, right는 가장 최악인 n * (long) times[times.length - 1] 로 잡는다.
2) left와 right의 mid 값을 구한 후, 해당 mid값 기준으로 몇 명을 심사대에서 통과 시킬 수 있는지 계산한다.
3) 만약 cnt가 n보다 크거나 같은 경우는 기준 값을 줄일 수 있는 경우이므로, right을 mid-1로 땡겨준다.
4) 만약 cnt가 n보다 작은 경우는 기준 값이 부족한 경우이므로, left를 mid + 1로 옮겨준다.
5) left <= right까지 2~4를 반복한다.
