ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ 2512 - 예산
    PS 2024. 8. 14. 21:41

    https://www.acmicpc.net/problem/2512

     

    2분 탐색으로 풀었다.

    오랜만에 2분탐색 문제를 풀어서 재밌었다.

    주의할 점은 출력을 '배정된 예산들 중 최댓값인 정수를 출력한다.' 는 것이다.

     

    총 예산이 400이고, 지원요청이 100, 80, 95로 이 안에서 모든 예산을 지원할 수 있다고하자.

    이 때, 상한선을 130으로 해도 모두 지원가능한데, 어차피 최대 100만 지원하면 되므로 배정된 예산들 중 최대값인 정수는 100이 되고, 답은 100을 출력하면 된다. 만약 총예산이 더 적어서 상한을 90으로 해야한다면 90을 출력해야 한다.

     

    오랜만에 2분탐색 문제를 풀어서 재밌었고, 문제를 읽자마자 2분탐색을 써야한다는 게 떠올라서 너무 좋았다.

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n;
    vector<ll> v;
    ll num;
    ll m;
    ll ans = m;
    ll mx;
    bool go(ll mid)
    {
        // cout << "mid : " << mid << "\n";
        ll sum = 0;
        for (ll i = 0; i < n; i++)
        {
            ll num = v[i];
            if (num > mid)
            {
                sum += mid;
            }
            else
            {
                sum += num;
            }
        }
        if (sum > m)
        {
            return false;
        }
        else if (sum <= m)
        {
            return true;
        }
        return true;
    }
    
    int main()
    {
        cin >> n;
        for (ll i = 0; i < n; i++)
        {
            cin >> num;
            v.push_back(num);
            mx = max(mx, num);
        }
        cin >> m;
        ll left = 0;
        ll right = m;
        while (right >= left)
        {
            ll mid = (left + right) / 2;
            bool res = go(mid);
            if (res)
            {
                ans = max(ans, mid);
                left = mid + 1;
            }
            else
            {
                right = mid - 1;
            }
        }
        ans = min(mx, ans);
        cout << ans << "\n";
        return 0;
    }

    'PS' 카테고리의 다른 글

    BOJ 2467 - 용액  (0) 2024.08.20
    BOJ 2638 - 치즈  (0) 2024.08.17
    BOJ 17142 - 연구소 3  (0) 2024.08.13
    BOJ 2631 - 줄세우기  (0) 2024.08.05
    BOJ 4485 - 녹색 옷 입은 애가 젤다지?  (0) 2024.08.04

    댓글

Designed by Tistory.