https://programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
이분탐색의 기본적인 응용문제입니다.
가능한 정답의 최소시간 = 1과 확실하게 가능한 정답중의 하나 = ((대기자의 수 / 심사관의 수) + 1 ) * 가장 느린 심사속도 두개를 시작점으로 해서 이분탐색을 돌리면 됩니다.
이분 탐색 문제는 언제나 탐색을 멈추는 조건을 정하는게 어려운데, 문제가 보통 정답의 최댓값이나 최솟값을 요구합니다. 우리는 문제에 따라 확실하게 가능한 정답과 확실하게 정답이 아닌 것+1을 줄여가다가 둘이 겹치는 곳에서 문제가 요구하는 답을 찾을 수 있습니다.
public class q43238_Programmers_입국심사 {
public static void main(String[] args) {
int n = 6;
int[] times = { 7, 10 };
System.out.println(solution(n, times));
}
private static long solution(int n, int[] times) {
long answer = 0;
long max = 0;
for (int t = 0; t < times.length; t++) {
max = Math.max(max, times[t]);
}
long left = 1;
long right = ((n / times.length) + 1) * max;
while (left < right) {
long center = (left + right) / 2;
long count = 0;
for (int t = 0; t < times.length; t++) {
count += (center / times[t]);
}
if(count >= n) {
right = center;
}else {
left = center + 1;
}
}
answer = right;
return answer;
}
}
'🔍 알고리즘 > 프로그래머스 Java' 카테고리의 다른 글
[Java] 프로그래머스 118666. 성격유형검사하기 (Lv.1) (0) | 2022.08.18 |
---|---|
[Java] 프로그래머스 1831.4단고음 (Lv.4) (0) | 2022.06.30 |
[Java] 백준 23559번. 밥 (실버1) (0) | 2022.06.29 |
[Java] 프로그래머스 64064.불량사용자 (Lv.3) (0) | 2022.06.17 |
[Java] 프로그래머스 60057.문자열압축 (Lv.2) (0) | 2022.06.03 |