Leetcode Java Minimized Maximum of Products Distributed to Any Store
업데이트:
문제
코드
class Solution {
public int minimizedMaximum(int n, int[] quantities) {
int left = 1;
int right = 100000;
while (left < right) {
int mid = (left + right) / 2;
int sum = 0;
for (int quantity : quantities) {
sum += (quantity + (mid - 1)) / mid;
}
if (sum > n) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
}
결과
설명
- 제품 유형 별 갯수가 저장된 quantities를 n개 상점에 아래의 규칙대로 배포할때, 배포할 수 있는 최대 가능한 갯수를 반환하는 문제이다.
- 각 상점에는 한 가지 유형의 제품만 취급 가능하다.
- 각 상점에 제공하는 제품 갯수는 최소화하여 제공해야한다.
-
left와 right는 quantities의 탐색 위치를 저장할 변수로, 제품 유형의 범위인 1과 100000으로 초기화한다.
- left가 right 미만일 때 까지 아래를 반복한다.
- mid는 중앙값을 저장할 변수로, $\frac{left + right}{2}$의 값으로 초기화한다.
- sum은 제품의 합계를 저장할 변수로, quantities를 반복하여 $\frac{quantity + (mid - 1)}{mid}$인 mid개씩 제품을 분배할 때 가능한 상점의 수를 계산한다.
- 위의 반복이 완료되면 sum이 n보다 큰 경우, left에 $mid + 1$을 아니면 right에 mid를 넣어 제품 분배 갯수를 조절한다.
- 반복이 완료되면 분배 갯수가 저장된 left를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기