https://www.acmicpc.net/problem/2512
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N, M;
int arr[10001];
cin >> N;
int sum = 0;
for (int i = 0; i < N; i++) {
cin >> arr[i];
sum += arr[i];
}
cin >> M;
sort(arr, arr + N);
if (sum <= M) {
cout << arr[N - 1];
return 0;
}
else {
int left = 0;
int right = arr[N - 1];
int answer;
while (left <= right) {
sum = 0;
int middle = (left + right) / 2;
for (int i = 0; i < N; i++)
sum += min(arr[i], middle);
if (sum == M) {
cout << min(arr[N - 1], middle);
return 0;
}
else if (sum > M)
right = middle - 1;
else {
left = middle + 1;
answer = min(arr[N - 1], middle);
}
}
cout << answer;
}
return 0;
}
'APS > 백준' 카테고리의 다른 글
[2110] 공유기 설치 C++ (0) | 2022.02.13 |
---|---|
[2805] 나무 자르기 C++ (0) | 2022.02.13 |
[1920] 수 찾기 C++ (0) | 2022.02.08 |
[3273] 두 수의 합 (0) | 2021.08.25 |
[단계별로 풀어보기] 백트래킹 (0) | 2021.08.20 |