알고리즘/이진탐색

[백준/이진탐색/C++] 2512번 예산

데메즈 2023. 3. 16. 11:15
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