반응형
    
    
    
  https://www.acmicpc.net/problem/2110
2110번: 공유기 설치
첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가
www.acmicpc.net
1. 문제설명
공유기를 설치해야하는 최대 거리를 구하기 위해
이분 탐색법으로 가장 작은 거리와 가장 먼 거리를 확인하면서
주어진 조건으로 공유기를 설치할 수 있는 지 확인해야 하는 문제이다.
binary search를 활용한 Decide problem 문제.
2.문제풀이코드
#include <bits/stdc++.h>
using namespace std;
int n,c;
vector<int> house;
//O(N)
bool decide(int dist){
    int cnt = 1;
    int x = house[0];
    for(int i=1; i<n; i++){
        if(house[i] - x >= dist){
            x = house[i];
            cnt++;
        }
    }
    return cnt >= c;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> c;
    for(int i=0; i<n; i++){
        int t;
        cin >> t;
        house.push_back(t);
    }
    //O(NlogN)
    sort(house.begin(), house.end());
    
    int lo = 0;
    int hi = 1e9;
    //O(NlogN)
    while(lo<=hi){
        int mid = (lo+hi)/2;
        if(!decide(mid)){
            hi = mid-1;
        }
        else{
            lo = mid+1;
        }
    }
    cout << hi << '\n';
    return 0;
}
반응형
    
    
    
  'Algorithm > problem' 카테고리의 다른 글
| 백준 1786번 : 찾기 - KMP 알고리즘 (0) | 2022.06.24 | 
|---|---|
| 백준 2512번: 예산 - binary search cpp (0) | 2022.06.22 | 
| [LeetCode] best-position-for-a-service-centre - ternary search (0) | 2022.06.22 | 
| [LeetCode] Split Array Largest Sum - Binary Search (0) | 2022.06.22 | 
| 백준 18223번: 민준이와 마산 그리고 건우 Java 다익스트라 (0) | 2022.06.13 |