https://www.acmicpc.net/problem/2805
๋ฌธ์
์๊ทผ์ด๋ ๋๋ฌด M๋ฏธํฐ๊ฐ ํ์ํ๋ค. ๊ทผ์ฒ์ ๋๋ฌด๋ฅผ ๊ตฌ์ ํ ๊ณณ์ด ๋ชจ๋ ๋งํด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, ์ ๋ถ์ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ์์ฒญํ๋ค. ์ ๋ถ๋ ์๊ทผ์ด๋ค ์ง ๊ทผ์ฒ์ ๋๋ฌด ํ ์ค์ ๋ํ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ๋ด์ฃผ์๊ณ , ์๊ทผ์ด๋ ์๋ก ๊ตฌ์ ํ ๋ชฉ์ฌ์ ๋จ๊ธฐ๋ฅผ ์ด์ฉํด์ ๋๋ฌด๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค.
๋ชฉ์ฌ์ ๋จ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค. ๋จผ์ , ์๊ทผ์ด๋ ์ ๋จ๊ธฐ์ ๋์ด H๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋์ด๋ฅผ ์ง์ ํ๋ฉด ํฑ๋ ์ด ๋ ์ผ๋ก๋ถํฐ H๋ฏธํฐ ์๋ก ์ฌ๋ผ๊ฐ๋ค. ๊ทธ ๋ค์, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด๋ฅผ ๋ชจ๋ ์ ๋จํด๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์, ๋์ด๊ฐ H๋ณด๋ค ํฐ ๋๋ฌด๋ H ์์ ๋ถ๋ถ์ด ์๋ฆด ๊ฒ์ด๊ณ , ๋ฎ์ ๋๋ฌด๋ ์๋ฆฌ์ง ์์ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด์ ๋์ด๊ฐ 20, 15, 10, 17์ด๋ผ๊ณ ํ์. ์๊ทผ์ด๊ฐ ๋์ด๋ฅผ 15๋ก ์ง์ ํ๋ค๋ฉด, ๋๋ฌด๋ฅผ ์๋ฅธ ๋ค์ ๋์ด๋ 15, 15, 10, 15๊ฐ ๋ ๊ฒ์ด๊ณ , ์๊ทผ์ด๋ ๊ธธ์ด๊ฐ 5์ธ ๋๋ฌด์ 2์ธ ๋๋ฌด๋ฅผ ๋ค๊ณ ์ง์ ๊ฐ ๊ฒ์ด๋ค. (์ด 7๋ฏธํฐ๋ฅผ ์ง์ ๋ค๊ณ ๊ฐ๋ค) ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด๋ ์์ ์ ์ ๋๋ 0์ด๋ค.
์๊ทผ์ด๋ ํ๊ฒฝ์ ๋งค์ฐ ๊ด์ฌ์ด ๋ง๊ธฐ ๋๋ฌธ์, ๋๋ฌด๋ฅผ ํ์ํ ๋งํผ๋ง ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ค. ์ด๋, ์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋๋ฌด์ ์ N๊ณผ ์๊ทผ์ด๊ฐ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ ๋๋ฌด์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000)
๋์งธ ์ค์๋ ๋๋ฌด์ ๋์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋๋ฌด์ ๋์ด์ ํฉ์ ํญ์ M๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ธฐ ๋๋ฌธ์, ์๊ทผ์ด๋ ์ง์ ํ์ํ ๋๋ฌด๋ฅผ ํญ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค. ๋์ด๋ 1,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์ ๋๋ 0์ด๋ค.
์ถ๋ ฅ
์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
ํ์ด
์ซ์๋ค์ ๋๋ฉฐ ์กฐ๊ฑด์ ๋ง๋ (๋ฒค ๋๋ฌด์ ํฉ์ด m ์ด์) ์ซ์๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ๊ฒ ๋ต์ธ๋ฐ...
์์ ๋ฒ์๋ค์ด ๋ค ํ๋๊ฐ์ด ํฌ๋ ์๊ฐ์ด๊ณผ๋ฅผ ๋๋นํ์ฌ ์ด๋ถํ์์ ์ด์ฉํ๋ค
start = 0, end = ๋๋ฌด์ ์ต๋๊ธธ์ด ์ค์ ํ mid ๊ฐ์ผ๋ก ๋ฒ ๊ณ ๋์จ ๋๋ฌด๋ค์ ํฉ์ด m๋ณด๋ค
์์ผ๋ฉด -> start = mid+1
ํฌ๋ฉด -> end = mid-1, ๊ทธ๋ฆฌ๊ณ mid ๊ฐ ๋ต์ผ๋ก ์ฒดํฌํด๋๊ธฐ (๊ฐ๋ฅํ mid ๊ฐ์ด ์ฌ๋ฌ๊ฐ ๋์ค๋ฏ๋ก ์ต๋๊ฐ์ ๊ตฌํด์ผํ๋ค)
2%๋ ์ด๋ฐ์ ํ๋ ธ์ต๋๋ค ๊ฐ ๋จ๋ฉด ๋ฐ๋ก๋ฅผ ๋ ์ฐพ๋ ๊ฒ ๋ณด๋ค ๋ฒ์๋ฅผ ํ์ธํ์
๊ฐ๋ฅํ ๋๋ฌด ๋์ด๋ 20์ต, ๋๋ฌด ๊ฐ์๋ 100๋ง์ด๋ค.
์ด๋ฆผ์ก์๋ด๋ ๋ฒค ๋๋ฌด๋ค์ ํฉ์ ๋น์ฐํ 23์ต์ ๋๊ธฐ ๋๋ฌธ์ long long ์ผ๋ก ๋ฌ์ผํ๋ค.
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m, ans=-1;
cin >> n >> m;
vector<int> v(n);
for(int i=0; i<n; i++) {
cin >> v[i];
}
sort(v.begin(), v.end());
int start=0, end=v[n-1], mid;
while(start<=end) {
mid=(start+end)/2;
long long wood=0;
for(int i=0; i<n; i++) {
wood += v[i]>mid ? v[i]-mid : 0;
}
if(wood<m) {
end = mid-1;
} else {
start = mid+1;
ans = mid>ans ? mid : ans;
}
}
cout << ans;
return 0;
}
'๐๏ธ ICPC Sinchon > Binary Search' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1365๋ฒ: ๊ผฌ์ธ ์ ๊น์ค (0) | 2024.09.30 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1654๋ฒ: ๋์ ์๋ฅด๊ธฐ (0) | 2023.11.17 |
[BOJ][C++] ๋ฐฑ์ค 1107๋ฒ: ๋ฆฌ๋ชจ์ปจ (0) | 2023.01.21 |
[BOJ] ๋ฐฑ์ค 2110๋ฒ: ๊ณต์ ๊ธฐ ์ค์น (0) | 2022.10.13 |
[BOJ] ๋ฐฑ์ค 10816๋ฒ: ์ซ์ ์นด๋ 2 (0) | 2022.10.13 |