https://school.programmers.co.kr/learn/courses/30/lessons/43238#
이분 탐색 문제다. mid랑 midVal 이랑 변수명 착각해서 죙일 디버깅했다.
문제에서 최악의 경우 10억*10억의 시간이 소요되므로, 이를 end 포인터로 놓는게 핵심이다.
(Long.MAX_VALUE 등으로 놓으면 midVal에 오버플로가 발생함, 더 작으면 최악의 경우 케이스 틀림)
+ 문제엔 명시되지 않았지만, 아마 내림차순 정렬된 형태로 times가 주어지는 듯 하다.
때문에 long ed = (long) times[times.length -1] * n도 가능
class Solution {
public long solution(int n, int[] times) {
long answer = Long.MAX_VALUE;
long st = 0;
long ed = 1000000000 * 1000000000L;
while(st <= ed) {
long mid = st + ed >>> 1;
long midVal = 0;
for(int i=0; i<times.length; i++) {
midVal += mid / times[i];
}
if(midVal >= n) {
ed = mid - 1;
if(mid < answer) {
answer = mid;
}
}
else {
st = mid + 1;
}
}
return answer;
}
}
'[프로그래머스] 절대 외부 IDE를 써선 안돼 > Java' 카테고리의 다른 글
[lv3] 최고의 집합 (0) | 2024.11.04 |
---|---|
[lv3] 야근 지수 (0) | 2024.11.04 |
[lv2] 전력망을 둘로 나누기 (1) | 2024.10.16 |
[lv2] 모음사전 (0) | 2024.10.15 |
[lv2] 등굣길 (0) | 2024.10.15 |