백준 2110 c++ : 이분탐색

magicdrill·2025년 11월 3일

백준 문제풀이

목록 보기
664/673

백준 2110 c++ : 이분탐색

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void input_data(int* N, int* C, vector<int>& x) {
	int i, xi;

	cin >> *N >> *C;
	for (i = 0; i < *N; i++) {
		cin >> xi;
		x.push_back(xi);
	}

	return;
}

bool canInstall(const vector<int>& x, int N, int C, int d) {
    int count = 1;
    int last = x[0];
    int i;

    for (i = 1; i < N; i++) {
        if (x[i] - last >= d) {
            count++;
            last = x[i];

            if (count >= C) {
                return true;
            }
        }
    }
    return false;
}

int find_answer(int N, int C, vector<int>& x) {
    sort(x.begin(), x.end());

    int left = 1, right = x.back() - x.front(), mid;
    int answer = 0;

    while (left <= right) {
        mid = left + (right - left) / 2;
        if (canInstall(x, N, C, mid)) {
            answer = mid;      
            left = mid + 1;
        }
        else {
            right = mid - 1;   
        }
    }
    return answer;
}

int main(void) {
	int N, C;
	vector <int> x;

	input_data(&N, &C, x);
	cout << find_answer(N, C, x) << "\n";

	return 0;
}

0개의 댓글