[리트코드] 2064
플랫폼 : https://leetcode.com/
문제 링크 : https://leetcode.com/problems/minimized-maximum-of-products-distributed-to-any-store
접근 방식
최솟값은 한 개씩 담을 수 있고, 최댓값은 quantities 배열내의 최댓값을 담을 수 있다.
따라서 최솟값과 최댓값의 중간부터 값을 시작해서, 몇 개 담을 수 있는지를 파악하고
만약, n보다 크다면 최솟값을 올리고, 작거나 같다면 최댓값을 내린다.
결과
소스 코드
import java.util.*;
class Solution {
public int minimizedMaximum(int n, int[] quantities) {
int left = 1;
int right = Arrays.stream(quantities).max().getAsInt();
int result = right;
while(left<=right){
int mid = (left+right)/2; // 중간점
int cnt = 0;
for(int q:quantities){
cnt+= q%mid==0 ? q/mid : q/mid+1;
}
if(cnt<=n){
result = mid;
right = mid-1;
}else{
left = mid+1;
}
}
return result;
}
}
느낀 점
완전탐색은 웬만하면 지양하고, 최대 혹은 최솟값을 구해야 할 경우에는 이분탐색을 이용하자.