이번에 풀어본 문제는
프로그래머스 입국심사 입니다.
import java.util.*;
class Solution {
public long solution(int n, int[] times) {
long answer = 0;
Arrays.sort(times);
long start = 1;
long end = (long)n * times[times.length - 1];
while(start <= end) {
long mid = (start + end) / 2;
long sum = 0;
for (int time : times) {
sum += (mid / time);
}
if (sum >= n) {
end = mid - 1;
answer = mid;
}
else {
start = mid + 1;
}
}
return answer;
}
}
n명의 인원에 대한 입국심사를 진행한다고 할 때, times배열의 원소들은 각 심사관들이 한 명을 심사하는데 걸리는 시간을 나타냅니다. n명을 모두 심사하는데 필요한 최소비용을 구하는 문제입니다.
먼저 times 배열을 정렬하고, 최선 / 최악의 경우의 수를 start / end로 초기화 시켜줍니다.
mid 값이 입국심사를 모두 끝내기 위한 기준 시간이 되며, n값과 비교했을 때 더 크다면 기준 시간이 너무 큰 것이므로 end값을 줄이고, 반대로 작았을 때는 start값을 올려 결괏값을 이분탐색을 통해 구할 수 있습니다.
이분탐색을 진행할 기준 값을 선정하지 못해 조금 접근이 어려웠던 문제입니다.
다른 블로그를 조금 참고했지만, 완벽하게 이해할 수 있었어서 다음에 다시 풀어봐야할 것 같아요!