728x90
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ปํ์ด ๊ณผ์
๋ฑ๊ฐ๊ฒฉ์ผ๋ก ์ค์นํ ์ ์๋ ๊ฐ์ฅ ํฐ ๊ฐ๊ฒฉ์ ๋งค๊ฐ๋ณ์ ํ์์ผ๋ก ๊ตฌํ๋ฉด ๋ฉ๋๋ค. ์ ๋ ฅ ๋ฐ์ ์ง ์์น๋ค์ ๋ฐฐ์ด(arr)์ ๋ด๊ณ , ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ค ๋ค์ ๋ค์ ๊ณผ์ ์ ์งํํด ์ฃผ์์ต๋๋ค.
- left = 0 (์ฒซ ๋ฒ์งธ ~ ์ฒซ ๋ฒ์งธ ๊ณต์ ๊ธฐ ์ฌ์ด์ ๋ฒ์), right = arr[N - 1] (์ฒซ ๋ฒ์งธ ~ ๋ง์ง๋ง ๊ณต์ ๊ธฐ ์ฌ์ด์ ๋ฒ์)
- mid = (left + right) / 2๋ก ์ค๊ฐ ๋ฒ์๊ฐ์ ๊ตฌํ๊ณ , ํ์ฌ ์์น๊ฐ(currentPos) = arr[0]๋ก ์ด๊ธฐํ ํด์ค๋๋ค.
- ๊ณต์ ๊ธฐ ์ค์น ๊ฐ์๋ฅผ ์ ๋ณ์(routerCount)๋ฅผ 1๋ก ์ด๊ธฐํํฉ๋๋ค. (๋งจ ์ฒ์์ ํ๋ ์ค์นํ๊ณ ์์ํ๋ฏ๋ก)
- arr[1] ~ arr[N - 1]๊น์ง ์ํํ๋ฉฐ, arr[i] - currentPos >= mid๋ผ๋ฉด, routerCount++
- ๊ทธ๋ฆฌ๊ณ currentPos = arr[i]๋ก ํ์ฌ ์์น๊ฐ์ ๊ฐฑ์ ํด์ค๋๋ค.
- 4๋ฒ ๋ฃจํ๊ฐ ๋๋ ํ routerCount < C๋ผ๋ฉด, ๊ฐ๊ฒฉ์ด ๋๋ฌด ๋๋ค๋ ๋ป์ด๋ฏ๋ก right = mid - 1์ ํ์ฌ ๋ค์ 2 ~ 4๋ฒ ๋ฐ๋ณต
- routerCount >= C๋ผ๋ฉด, ์ข ๋ ์์ ๊ฐ๊ฒฉ์ด ์์ ์ ์์ผ๋ฏ๋ก left = mid + 1์ ํ์ฌ ๋ค์ 2 ~ 4๋ฒ ๋ฐ๋ณต
- left <= right๋ฅผ ๋ง์กฑํ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณต
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
int FindMaxDistance(const vector<int>& positions, const int N, const int C)
{
int left = 0, right = positions.back() - positions.front();
int distance = 1;
while (left <= right)
{
int routerCount = 1;
int range = (right + left) / 2;
int currentPosition = positions.front();
for (int i = 1; i < N; i++)
{
if (positions[i] - currentPosition >= range)
{
routerCount++;
currentPosition = positions[i];
}
}
if (routerCount < C)
right = range - 1;
else
{
left = range + 1;
distance = range;
}
}
return distance;
}
int main()
{
FAST_IO
int N, C;
cin >> N >> C;
vector<int> positions(N);
for (int i = 0; i < N; i++)
cin >> positions[i];
sort(positions.begin(), positions.end());
cout << FindMaxDistance(positions, N, C);
return 0;
}
728x90
๋ฐ์ํ
'๐คAlgorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 16928๋ฒ | ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (C++) (0) | 2023.12.01 |
---|---|
[BOJ] 9935๋ฒ | ๋ฌธ์์ด ํญ๋ฐ (C++) (1) | 2023.10.08 |
[BOJ] 2512๋ฒ | ์์ฐ (C++) (0) | 2023.09.06 |
[BOJ] 1300๋ฒ | K๋ฒ์งธ ์ (C++) (0) | 2023.09.06 |
[BOJ] 13335๋ฒ | ํธ๋ญ (C++) (0) | 2023.09.04 |