알고리즘 공부/문제 풀이
[프로그래머스] 이분탐색 - 입국심사
valid_ming
2020. 9. 1. 17:16
https://syundev.tistory.com/170
참고하여 문제를 해결하였다.
문제를 읽고 왜 이게 이분탐색이지..? 생각했다.
아무리 이분 탐색으로 해결하려고 고민해도.. 각이 안 나와서 결국 서칭..
나는 문제를 매 시점마다 처리하는 것으로 해결하려는 경향이 있다.
하지만 이러한 풀이법은 비효율적인 계산이 많다..
역시나 이 문제도 시점마다 처리하는 것이 아닌 입국심사가 가능한 시간 중 가장 효율적인 시간을 찾는 것이었다.
이 때 사용한 개념이 이분 탐색이었다.
입국 심사가 가능한 시간 중 가장 효율적인 시간을 찾는 방법
해당 시간 안에 심사대마다 심사할 수 있는 사람의 수를 더해주어 n과 비교해준다.
이때 입국 심사가 가능한 시간은 가장 적은 시간부터 긴 시간으로 나열되어있기 때문에
이분 탐색을 사용할 수 있고, 기다리는 사람이 매우 많을 수 있기 때문에 이분 탐색을 사용하는 것이 가장 효율적이다.
import java.util.*;
class Solution {
public long solution(int n, int[] times) {
long answer = 0;
Arrays.sort(times);
long left=0;
long right=(long)times[times.length-1]*n;
while(left <= right) {
long mid=(left+right)/2;
long count=0; //x시간동안 입국 가능한 사람 수
for(int i=0;i<times.length;i++) {
count += (long)mid/times[i];
}
if(count>=n) {
right=mid-1;
answer=mid;
}
else {
left=mid+1;
}
}
return answer;
}
}