문제 풀이
오늘의 문제 - 프로그래머스[입국심사]
나의 풀이
import java.util.*;
class Solution {
public long solution(int n, int[] times) {
Arrays.sort(times);
long start = 0;
long end = (long) times[0] * (long) n;
while(start <= end) {
long mid = (start + end) / 2,
humans = 0;
for(int i = 0; i < times.length; i++) humans += mid / times[i];
if(humans >= n) end = mid - 1;
else start = mid + 1;
}
return start;
}
}
해결과정
- 루프돌리기, 한 심사위원만 사용하여 최소시간으로 끝낼수 있는 경우 배열 sorting
- 최대값으로 한 심사위원만 사용하여 최소시간으로 끝낼수 있는 경우 대입
- 이분탐색 시도 중간값, 해당시간때 발생할수 있는 사람수 변수 선언
- 시간때별로 발생할수 있는 사람 경우 변수 대입
- 최소값, 최대값 범위차이 끝까지 줄이기
- 이분탐색이 더 불가한경우에 반환
오늘 배운 점
이분 탐색을 할 때는
- 내가 찾아야 할 정답의 범위를 left ~ right로 정한다.
- 정답을 mid로 간주한 후, 해당 정답이 유효한지 살펴본다.
- 2번 여부를 따지며 left와 right의 범위를 좁힌다.
- left > right가 되면 반복을 끝내고 답을 반환한다.
import 를 까먹지말자
- java로 코테를 하는게 처음이라, import 를 하지 않아서 자꾸 런타임 오류가 났는데 원인을 몰라 헤맸다.