728x90
반응형
문제는 여기!
문제풀이 방법
- 변수들은 long long int 사용
- start는 budget[0] 이 아닌 0으로 초기화하기!
전체 코드
#include <bits/stdc++.h>
using namespace std;
int N, M;
vector<int> budget;
long long int answer=0;
void solve(){
long long int start = 0, end = budget[N-1];
long long int mid, sum = 0;
while(start <= end){
mid = (start+end)/2;
for(int i=0; i<N; i++){
if(budget[i]<=mid){
sum += budget[i];
} else {
sum += mid;
}
}
if(sum == M){
answer = mid;
break;
} else if(sum > M) {
end = mid - 1;
} else {
start = mid + 1;
answer = mid;
}
sum = 0;
}
}
void input() {
cin >> N;
for(int i=0; i<N; i++){
int x;
cin >> x;
budget.push_back(x);
}
sort(budget.begin(), budget.end());
cin >> M;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
input();
solve();
cout << answer;
return 0;
}
728x90
반응형
'알고리즘 > 이진탐색' 카테고리의 다른 글
[백준/C++] 1822번 차집합 (0) | 2023.02.27 |
---|---|
[백준/이진탐색/C++] 1920번 수 찾기 (0) | 2023.02.22 |