Recent Posts
Notice
No Rules Rules
예산 (feat. 백준, 2512번) 본문
728x90
반응형
예산
https://www.acmicpc.net/problem/2512
반응형
// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(false), cin.tie(NULL);
register int N, M, arr[10000], sum, ans;
cin >> N;
for(register int n = 0; n < N; ++n)
cin >> arr[n];
cin >> M;
// auto mm = minmax_element(arr, arr + N);
// register int low = *mm.first, high = *mm.second, mid;
register int low = 0, high = *max_element(arr, arr + N), mid;
while(low <= high){
sum = 0;
mid = (low + high) / 2;
for(register int i = 0; i < N; ++i)
sum += min(arr[i], mid);
if(sum <= M)
ans = mid, low = mid + 1;
else if(sum > M)
high = mid - 1;
}
cout << ans;
return 0;
}
// *&)*@*
- 이진탐색으로 중간값을 선택합니다.
- 중간값과 입력받은 P0, P1, P2 각각에 대해서 둘 중 최소값을 누적합니다. ( min(mid, P0) + min(mid, P1) + ...)
- 누적값과 입력받은 M값을 통해 이진탐색의 low와 high를 조정합니다.
- 주의할 점은 low는 입력값의 최소값이 아니라 0부터 수행되어야 한다는 점입니다.
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
보석 도둑 (feat. 백준, 1202번) (0) | 2022.09.20 |
---|---|
카드 정렬하기 (feat. 백준, 1715번) (0) | 2022.09.20 |
부등호 (feat. 백준, 2529번) (0) | 2022.09.19 |
로프 (feat. 백준, 2217번) (0) | 2022.09.19 |
영역 구하기 (feat. 백준, 2583번) (0) | 2022.09.17 |
Comments