๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐“ก๐“ธ๐“ธ๐“ถ๐Ÿฃ: ๐’œ๐“๐‘”๐‘œ๐“‡๐’พ๐“‰๐’ฝ๐“‚/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด

BOJ2805 : ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>

using namespace std;

long long N, M;
long long H[1000000];

long long totalLength(long long n)
{
    long long length = 0;
    for (int i = 0; i < N; i++)
    {
        if (H[i] - n > 0)
            length += (H[i] - n);
    }
    //  cout << length;
    return length;
}

int main()
{

    cin >> N >> M;
    for (int i = 0; i < N; i++)
        cin >> H[i];
    sort(H, H + N);
    long long down = 0;
    long long top = H[N - 1];
    long long ans = 0;
    while (down <= top)
    {
        long long mid = (down + top) / 2;
        long long cnt = totalLength(mid);
        //    cout << "down " << down << " top " << top << " length " << cnt << "\n";
        if (cnt >= M)
        {
            down = mid + 1;
            ans = mid;
        }
        else
        {
            top = mid - 1;
        }
    }
    cout << ans;

    return 0;
}