2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
평범한 이분 탐색 문제이지만, 정답이 각 지방 예산중 최댓값을 출력하는 것임을 유의하자.
#include <cstdio>
#include <algorithm>
using namespace std;
int main(void){
long long int N, array[10001], arraymax = -1, maxmoney, ans = -1;
scanf("%lld", &N);
for(int i=0; i<N; i++){
scanf("%lld", &array[i]);
arraymax = max(array[i], arraymax);
}
scanf("%lld", &maxmoney);
long long int left = 0, right = 100000, mid, money;
while(left <= right){
money = 0;
mid = (left + right)/2;
for(int i=0; i<N; i++){
if(array[i] < mid)
money += array[i];
else
money += mid;
}
if(money <= maxmoney){
ans = max(ans, mid);
left = mid + 1;
}
else
right = mid - 1;
}
if(arraymax < ans)
printf("%d", arraymax);
else
printf("%lld", ans);
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 17413번] 단어 뒤집기 2 (Silver 3) (0) | 2020.09.16 |
---|---|
[C/C++ 백준 10815번] 예산 (Silver 4) (0) | 2020.09.16 |
[C/C++ 백준 1676번] 팩토리얼 0의 개수 (Silver 3) (0) | 2020.09.14 |
[C/C++ 백준 2096번] 내려가기 (Gold 4) (0) | 2020.09.13 |
[C/C++ 백준 9084번] 동전 (Silver 1) (0) | 2020.09.11 |