BOJ_3079_입국심사_JAVA
문제 : 입국심사
링크 : BOJ_3079_입국심사
접근 방식
이분탐색 문제이다. 나는 이 문제를 프로그래머스에서 풀었는데, BOJ에도 같은 문제가 있었다.
M명이 모두 입국심사를 받는 데 걸리는 최소 시간을 구해야하는데, 이분탐색을 통해 N분일 때 몇 명이 입국심사를 마치는 지 조사하여, 목표 인원수인 M보다 클 경우에 가장 빠른 시간을 찾도록 이분탐색을 적용하는 문제이다.
이번 코드는 프로그래머스 문제의 코드로, 그대로 복사 붙여넣기 하여 BOJ에 제출할 경우 틀리게 된다. 하지만 로직 자체는 동일하기 때문에 그대로 올린다.
이분탐색은 탐색의 시작 전에 꼭 미리 오름차순 정렬을 해두어야 한다는 점을 잊지 말도록 하자.
소스 코드
import java.util.*;
public class PM_43238_입국심사 {
public static void main(String[] args) {
System.out.println(solution(6, new int[] {7,10}));
}
public static long solution(int n, int[] times) {
long answer = 0;
long start = 1;
long end = 1000000000l*1000000000l;
long middle = 0;
Arrays.sort(times);
while(start <= end) {
middle = (start + end)/2;
long human = 0;
for(int i=0;i<times.length;i++) {
human = human + (middle/times[i]);
if(human >= n) {
break;
}
}
if(human >= n) {
answer = middle;
end = middle -1;
}else {
start = middle+1;
}
}
return answer;
}
}
나는 한 번에 코드를 짜고, 그 코드가 들어맞을 때 희열을 느끼는 편인데, 쉬운 문제였지만 오랜만에 한 번에 코드를 짜고 맞춘 문제라서 기분이 좋았다.