https://www.acmicpc.net/problem/2805
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
long long N, K; cin >> N >> K;
vector<long long> list;
for (long long i = 0; i < N; i++) {
long long n; cin >> n;
list.push_back(n);
}
long long left = 0, right = *max_element(list.begin(), list.end());
long long answer = right;
while (left <= right) {
long long mid = (left + right) / 2;
long long sum = 0;
for (long long i = 0; i < N; i++) {
long long num = list[i] - mid;
if (num > 0) {
sum += num;
}
}
if (sum >= K) {
left = mid + 1;
answer = mid;
}
else {
right = mid - 1;
}
}
cout << answer << endl;
return 0;
}
'전공공부 > 코딩테스트' 카테고리의 다른 글
(c++) 백준 "1676) 팩토리얼 0의 개수" (0) | 2022.06.05 |
---|---|
(c++) 백준 "1811) 마인크래프트" (0) | 2022.06.05 |
(c++) 프로그래머스 "징검다리 건너기"(level 3) (0) | 2022.06.03 |
(c++) 백준 "10814) 나이순 정렬" (0) | 2022.06.03 |
(c++) 백준 "2609) 최대공약수와 최소공배수" (0) | 2022.06.03 |