문제 설명
물이 담긴 N 개의 잔과 각각의 용량 목록이 주어집니다. 작업은 정확히 K개의 잔을 채우는 데 필요한 최소 병 수를 찾는 것입니다. 각 병의 용량은 100개입니다.
예시
N =5, K =4인 경우 용량[] ={1, 2, 3, 2, 1}.
- 2, 3, 2 용량의 안경을 채우려면 8단위가 필요합니다.
- 이렇게 하면 1병만 열 수 있습니다.
알고리즘
- K 안경을 정확히 작성하려면 최소 용량의 K 안경을 가져가세요.
-
총 필요한 병은 다음과 같이 계산할 수 있습니다. -
(1st k 잔의 용량 합계) / (1병 용량)의 상한값.
예시
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int minBottles(int *capacity, int n, int k) {
sort(capacity, capacity + n);
int sum = 0;
for (int i = 0; i < k; ++i) {
sum += capacity[i];
}
return ceil((double)sum/100);
}
int main() {
int capacity[] = {1, 2, 3, 2, 1};
cout << "Min bottles required = " <<minBottles(capacity, 5, 4) << endl;
return 0;
} 출력
위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다 -
Min bottles required = 1