728x90
이해하기
바로 전에 이진탐색 문제를 풀어서 자신있는 상태였는데, 이젠 디테일한 부분들이 헷갈린다ㅏ...
헷갈렸던 포인트들
- 사람 수를 조절이 아니라 (고정되어 있음) 시간 조절!
- 반환형이 long이니 그에 맞춰서 long 변수들 만들기!
- max = mid - 1 / min = mid + 1
그래도 어찌저찌 풀어냈다...!
- times를 sort한다.
- min = 0, max = times[times.length - 1] * (long)n = 가~장 오래 걸리는 시간
- mid 값 조절하며 체크
- mid 값을 times[i]로 나눠가며 심사 가능한 사람의 수를 구함
- e.g. mid = 3 times = {5, 8, 10}
- count = 5/3 + 8/3 + 10/3 = 1 + 2 + 3 = 6
- 최대 6명 심사 가능
- mid 값을 times[i]로 나눠가며 심사 가능한 사람의 수를 구함
문제풀이
import java.util.*;
class Solution {
public long solution(int n, int[] times) {
long answer = 0;
Arrays.sort(times);
long min = 0;
long max = times[times.length - 1] * (long)n;
while (min <= max) {
long mid = (min + max) / 2;
long people = cal(mid, times);
if (people >= n) {
max = mid - 1;
answer = mid;
} else {
min = mid + 1;
}
}
return answer;
}
public long cal(long mid, int[] times) {
long count = 0;
for (int i = 0; i < times.length; i++) {
count += mid / times[i];
}
return count;
}
}
'JAVA > Coding Test Study' 카테고리의 다른 글
[Lv.2] 프로그래머스 - 롤케이크 자르기 : Java (0) | 2024.04.15 |
---|---|
[Lv.2] 프로그래머스 - 점프와 순간 이동 : Java (0) | 2024.04.15 |
[Lv.3] 징검다리 건너기 : Java (0) | 2024.04.05 |
[Lv.2] 점 찍기 : Java (0) | 2024.04.05 |
[Lv.2] 시소 짝꿍 : Java (0) | 2024.04.03 |