728x90
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ปํ์ด ๊ณผ์
๋งค๊ฐ๋ณ์ ํ์์ผ๋ก ํ ์ ์์ต๋๋ค. ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์์ต๋๋ค.
- ์ ๋ ฅ ๋ฐ์ ์์ฐ๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
- ์์ฐ๋ค์ ํฉ๊ณ๊ฐ M ์ดํ๋ผ๋ฉด, ์์ฐ๋ค ์ค ์ต๋๊ฐ(๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฐ)์ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํฉ๋๋ค.
- ๊ทธ๊ฒ ์๋๋ผ๋ฉด, ์ต์ ์์ฐ๊ฐ(1)๊ณผ ์ต๋ ์์ฐ๊ฐ(๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฐ)์ ๊ฐ์ง๊ณ ์ด๋ถ ํ์์ ์์ํฉ๋๋ค.
- "mid = (left + right) / 2" ๊ฐ์ ๊ณ์ฐํฉ๋๋ค.
- ์์ฐ์ ์ด ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋, mid ๊ฐ๋ณด๋ค ํฐ ์์ฐ์ mid ๊ฐ์ผ๋ก ํฉ๊ณ์ ๋ํฉ๋๋ค.
- ๋ค ๋ํ ์ด ํฉ๊ณ๊ฐ M ์ดํ๋ผ๋ฉด, left = mid + 1์ ํ๊ณ max(mid, ์ด์ mid)๋ก ๊ฐฑ์ ํฉ๋๋ค.
- ์๋๋ผ๋ฉด, right = mid - 1์ ์ ์ฉํฉ๋๋ค.
- left > right๊ฐ ๋ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#define FAST_IO cout.tie(NULL); cin.tie(NULL); ios::sync_with_stdio(false);
using namespace std;
using uint32 = unsigned int;
int main()
{
FAST_IO
int N;
cin >> N;
vector<uint32> budgets(N);
for (int i = 0; i < N; i++)
cin >> budgets[i];
sort(budgets.begin(), budgets.end());
uint32 start = 1, last = budgets.back();
uint32 M;
cin >> M;
if (accumulate(budgets.begin(), budgets.end(), 0) <= M)
{
cout << budgets.back();
return 0;
}
uint32 answer = 0;
while (start <= last)
{
uint32 mid = (start + last) / 2;
uint32 money = 0;
for (const auto& budget : budgets)
money += (budget <= mid) ? budget : mid;
if (money <= M)
{
start = mid + 1;
answer = max(answer, mid);
}
else
last = mid - 1;
}
cout << answer;
return 0;
}
728x90
๋ฐ์ํ
'๐คAlgorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 9935๋ฒ | ๋ฌธ์์ด ํญ๋ฐ (C++) (1) | 2023.10.08 |
---|---|
[BOJ] 2110๋ฒ | ๊ณต์ ๊ธฐ ์ค์น (C++) (0) | 2023.10.08 |
[BOJ] 1300๋ฒ | K๋ฒ์งธ ์ (C++) (0) | 2023.09.06 |
[BOJ] 13335๋ฒ | ํธ๋ญ (C++) (0) | 2023.09.04 |
[BOJ] 1654๋ฒ | ๋์ ์๋ฅด๊ธฐ (C++) (0) | 2023.09.02 |