C++:: boj1477 <휴게소 세우기>

jahlee·2024년 1월 10일
0

백준_골드

목록 보기
20/24
post-thumbnail

priority_queue로 구현을 해보다가 잘못된 접근이라는 것을 깨닫고 풀이를 찾아본 문제이다. 이분탐색을 활용해 풀어야하는 문제이다.

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 휴게소 세우기
int main() {
	ios_base::sync_with_stdio(0), cin.tie(0);
	int n, m, l;
	cin >> n >> m >> l;
	vector <int> vec(n);

	vec.push_back(0); vec.push_back(l);
	for (int i = 0; i < n; i++) {
		cin >> vec[i];
	}
	sort(vec.begin(), vec.end());

	int low = 1, high = l - 1, mid;

	while (low <= high) {
		mid = (low + high) / 2;

		int cnt = 0;
		for (int i = 1; i < vec.size(); i++) {
			int dist = vec[i] - vec[i-1];

			cnt += dist / mid;
			if (dist % mid == 0) cnt--;
		}
		if (cnt > m)
			low = mid + 1;
		else {
			high = mid - 1;
		}
	}

	cout << low << endl;
}

0개의 댓글