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

+ Recent posts