[백준/BOJ] 백준 2110번 : 공유기 설치
2022. 8. 17. 05:37ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/2110
이분 탐색을 통해 두 공유기 사이가 최소 특정 거리 이상으로 배치해서 공유기를 모두 배치할 수 있는지 판단하는 방법으로 문제를 해결했다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n, c;
vector<int> x;
//두 공유기 사이가 최소 dist 이상으로 만들 수 있는지 확인
bool Solve(int dist) {
int check = 0;
int cnt = 0;
for (int i = 0; i < x.size(); i++) {
if (x[i] < check)
continue;
cnt++; //x[i]위치에 공유기 설치
check = x[i] + dist; //다음 공유기 위치는 해당 위치보다 dist이상에 있어야 한다
}
if (cnt >= c)
return true;
return false;
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> c;
for (int i = 0; i < n; i++) {
int input;
cin >> input;
x.push_back(input);
}
sort(x.begin(), x.end());
int left = 0;
int right = 1000000000;
int mid;
int result = -1;
while (left <= right) {
mid = (left + right) / 2;
if (Solve(mid))
{
result = mid;
left = mid + 1;
}
else
right = mid - 1;
}
cout << result;
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 5021번 : 왕위 계승 (0) | 2022.08.18 |
---|---|
[백준/BOJ] 백준 22959번 : 신촌 수열과 쿼리 (0) | 2022.08.17 |
[백준/BOJ] 백준 20183번 : 골목 대장 호석 - 효율성 2 (0) | 2022.08.17 |
[백준/BOJ] 백준 1339번 : 단어 수학 (0) | 2022.08.17 |
[백준/BOJ] 백준 1655번 : 가운데를 말해요 (0) | 2022.08.17 |