(C++) 백준 2110 공유기 설치

mnaz·2021년 9월 13일

이문제 틀린 이유

  • 처음 초기값 left = 0 (v[0] 아님)
  • left, right의 범위 while(left<=right) 같을수도 있음
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
    int N,C;
    cin>>N>>C;

    vector<int> v(N);
    for(int i=0; i<N; i++) cin>>v[i];

    sort(v.begin(), v.end());

    int left = 0;
    int right = v[N-1];
    int ans=0;

    while(left<=right){

        int mid = (left+right)/2;
        int prev = 0;
        int cnt=1;

        for(int i=1; i<N; i++){
            if(v[i]-v[prev]>=mid) {
                cnt++;
                prev =i;
            }
        }

        if(cnt>=C){
            ans = mid;
            left = mid+1;
        }
        else right = mid-1;


    }

    cout<<ans;
}

0개의 댓글