https://www.acmicpc.net/problem/2792
์์ด๋ค์ ์์ ๋ณด์ ์์์ ์, ๋ณด์์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค.
๋ชจ๋ ๋ณด์์ ๋๋์ด์ค ๋ ์ต๋ํ ์ฐจ์ด๊ฐ ๋์ง ์๊ฒ ๋๋์ด์ฃผ๋ ๋ฐฉ๋ฒ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ํ ์์ด๊ฐ ๊ฐ๋ ๋ณด์์ ์๋ฅผ ์งํฌ์ฌ์ด๋ผ ํํํ๋ค.
์ด ๋ ํ ์์ด๋ ๊ฐ์ ๋ณด์์ ์์๋ง ๊ฐ์ ธ์ผ ํ๋ค. ๋ํ, ๋ณด์์ ๋ชป๋ฐ๋ ์์ด๋ ์์ด๋ ๋จ๋ ๋ณด์์ ์์ด์ผ ํ๋ค.
[์ ๋ ฅ]
์ฒซ์งธ ์ค์ ์์ด๋ค์ ์ N๊ณผ ์์์ ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 109, 1 ≤ M ≤ 300,000, M ≤ N)
๋ค์ M๊ฐ ์ค์๋ ๊ตฌ๊ฐ [1, 10^9]์ ํฌํจ๋๋ ์์ ์ ์๊ฐ ํ๋์ฉ ์ฃผ์ด์ง๋ค. K๋ฒ์งธ ์ค์ ์ฃผ์ด์ง๋ ์ซ์๋ K๋ฒ ์์ ๋ณด์์ ๊ฐ์์ด๋ค.
์ฒซ์งธ ์ค์ ์งํฌ์ฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
[ํ์ด]
ํ๋์ ๋ณด์์ ์๊ฐ ์ต๋ 10^9 ๊ฐ ์ฃผ์ด์ง๋ฏ๋ก ๋จ์ ์์ ํ์์ผ๋ก๋ ํ ์ ์๋ค.
์ด๋ ๊ฒ ํฐ ์๊ฐ ์ฃผ์ด์ง๊ณ ์ต์์ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ์ '์ด๋ถํ์' ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋ค.
์ด ๋ฌธ์ ์์ ์ด๋ถํ์์ ์ ์ฉํ๋ ๋ฒ์ ์งํฌ์ฌ์ด ๊ฐ์ง ์ ์๋ ์ต์ ์์ ์ต๋์๋ฅผ ํ์ ํ๊ณ ์ค๊ฐ๊ฐ๋ถํฐ ํ์ํ๋ฉฐ ์ต์ ์งํฌ์ฌ์ ์ฐพ๋ ๊ฒ์ด๋ค.
์์ 1์ ๋ด๋ณด์.
5 2
7
4
์์ด๋ค์ ์: 5, ๋ณด์ ์๊น 2
๋ณด์ ์๊น 1์ ๊ฐ์: 7
๋ณด์ ์๊น 2์ ๊ฐ์: 4
์ด ๋, ์ต์ ์งํฌ์ฌ์ 1, ์ต๋ ์งํฌ์ฌ์ 7์ด๋ผ๊ณ ์๊ฐํด๋ณผ ์ ์๋ค.
์ต๋ ์งํฌ์ฌ์ด 7์ธ ์ด์ ๋ ํ ์์ด๋ ๋ฐ๋์ ๊ฐ์ ์๊น์ ๋ณด์๋ง ๊ฐ์ง ์ ์์ผ๋ฏ๋ก ํ ์์ด๊ฐ ๊ฐ์ง ์ ์๋ ์ต๋ ๋ณด์์ ๊ฐ์๋ ๋ณด์ ์๊น1์ 7์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ 1 ~ 7์ ์ด๋ถํ์ํ๋ฉฐ ์ต์ ์งํฌ์ฌ์ ์ฐพ๋๋ค.
(์ฐธ๊ณ ๋ก ์ด๋ถํ์์ ์ค๊ฐ๊ฐ๋ถํฐ ํ์ํ๊ณ ์ ๋ต์ด ์ค๊ฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์๋์ง, ์ค๋ฅธ์ชฝ์ ์๋์ง Up & Down ๊ฒ์์ ํ๋ ๊ฒ์ด๋ค. 1~7์ ์ค๊ฐ๊ฐ์ '(์ต์๊ฐ + ์ต๋๊ฐ) / 2' ์ํ ๊ณต์์ผ๋ก ๊ตฌํ ์ ์๋ค.)
1) ์งํฌ์ฌ์ 4 ๋ผ๊ณ ๊ฐ์ ํ๊ณ ๋ณด์์ ๋๋ ๋ณด์. (1+7) / 2 = 4
3๋ช ์๊ฒ ๋๋ ์ค ์ ์๋ค. 5๋ช ๋ณด๋ค ์ ์ผ๋ฏ๋ก ๋ ์ธ์ธํ๊ฒ ์ชผ๊ฐค ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ๋ ์์ ์งํฌ์ฌ ์ง์๋ฅผ ์ฐพ๊ธฐ ์ํด ์ต๋๊ฐ์ '์ค๊ฐ๊ฐ -1' ๋ก ๊ฐฑ์ ํ๊ณ ๋ค์ ์ฐพ์๋ณด์.
2) ์ต์๊ฐ 2, ์ต๋๊ฐ 3 => ์ค๊ฐ๊ฐ 2(์งํฌ์ฌ์ 2) ๋ก ๋๊ณ ๋ณด์์ ๋๋ ๋ณด์.
5๊ฐ ์ด์์ผ๋ก ์ชผ๊ฐ์ง๋ฏ๋ก '๋ณด์ ๋๋๊ธฐ > ์์ด๋ค ์' ๊ฐ ๋๋ฏ๋ก ๋ณด์์ด ๋จ์์ ์๋๋ค. ๋ ํฐ ๊ฐ์ผ๋ก ๋๋ ์ผ ํ๋ฏ๋ก ์ต์๊ฐ์ '์ค๊ฐ๊ฐ +1' ๋ก ๊ฐฑ์ ํ๊ณ ํ์ํด๋ณด์.
3) ์ต์๊ฐ 2, ์ต๋๊ฐ 3 => ์ค๊ฐ๊ฐ 2(์งํฌ์ฌ์ 2) ๋ก ๋๊ณ ๋ณด์์ ๋๋ ๋ณด์.
2๋ฒ๊ณผ ๋์ผํ ๊ฒฝ์ฐ์ด๋ฏ๋ก ์ต์๊ฐ = ์ค๊ฐ๊ฐ + 1 ๋ก ๊ฐฑ์ ํ๊ณ ๋ค์ ํ์ํด๋ณด์.
4) ์ต์๊ฐ 3, ์ต๋๊ฐ 3 => ์ค๊ฐ๊ฐ 3 (์งํฌ์ฌ 3)
5๋ช ์๊ฒ ๋๋ ์ค ์ ์๋ค. ๋ํ '์ต์๊ฐ = ์ต๋๊ฐ' ์ด๋ฏ๋ก ๋์ด์ ์ด๋ถํ์์ ์งํํ ์ ์๋ค. ๋ฐ๋ผ์ ์ต์ ์งํฌ์ฌ ์ง์๋ 3์ด๋ค.
์ด๋ ๊ฒ ์งํฌ์ฌ ๊ฐ์ ์ค๊ฐ๊ฐ์ผ๋ก ์ ํด๋๊ณ Up & Down ํ๋ฉฐ ์ต์ ์งํฌ์ฌ์ ์ฐพ์ผ๋ฉด ๋๋ค. ์๊ฐ๋ณต์ก๋๋ O(logN) !
[์ฝ๋]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int childrenNum, colorNum, input;
int minNum = 1, maxNum = 0;
vector<int> colors;
int GetJealousy();
int main() {
cin >> childrenNum >> colorNum;
for (int i = 0; i < colorNum; i++) {
cin >> input;
colors.push_back(input);
maxNum = max(maxNum, input);
}
cout << GetJealousy() << "\n";
return 0;
}
int GetJealousy() {
int jealousy = 0;
while (minNum <= maxNum) {
int mid = (minNum + maxNum) / 2;
int divideNum = 0;
for (int color : colors) {
if (color % mid) divideNum += (color / mid) + 1;
else divideNum += (color / mid);
}
if (divideNum <= childrenNum) {
jealousy = mid;
maxNum = mid - 1;
}
else minNum = mid + 1;
}
return jealousy;
}
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] 1269 ๋์นญ ์ฐจ์งํฉ(feat. ์ด๋ถํ์) (0) | 2024.05.25 |
---|---|
[C++][BOJ] 2343 ๊ธฐํ ๋ ์จ (feat. ์ด๋ถํ์) (0) | 2024.05.23 |
[C++][BOJ] 9935 ๋ฌธ์์ด ํญ๋ฐ :: ๋ฌธ์์ด ๋น๊ต(stack, erase) (0) | 2024.05.15 |
[C++][BOJ] 1931 ํ์์ค ๋ฐฐ์ :: ๋ผ์ธ ์ค์ํ (0) | 2024.05.15 |
[C++][BOJ] 2109 ์ํ๊ฐ์ฐ :: ๊ทธ๋ฆฌ๋(Greedy) (0) | 2024.05.14 |