본문 바로가기

algorithm

휴게소 세우기

휴게소간의 거리를 뽑아서 정렬해서 세워 놓았다고 생각해보자.

ex)

-

----

------

---------

-----------

 

여기서 휴개소 5개를 세우려면 간격을 세로로 잘랐을 때 꼬다리가 5개가 추가로 생성되면 된다. (전형적인 이분탐색 문제)

 

 

<코드>

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int N,M,L;
int road[60];
vector<int> v;

int sol(int mid){
	int n = 0;
	for(int i = 1; i < v.size(); i++){
		n += (v[i] - v[i-1] - 1) / mid;
	}
	return n;
}
int main() {
	cin>>N>>M>>L;
	v.push_back(0);v.push_back(L);
	for(int i = 0,a;i < N; i++) {cin>>a;v.push_back(a);};
	sort(v.begin(),v.end());

	int s = 1, e = L, mid = 0;
	while(s<=e){
		mid = (s+e)/2;
		if(sol(mid) > M) s = mid + 1;
		else  {
			e = mid -1;
		}
	}
	cout<<s;
	return 0;
}

'algorithm' 카테고리의 다른 글

15877  (0) 2022.05.14
1068  (0) 2022.05.13
보석 도둑  (0) 2022.05.09
11000 , 2149  (0) 2022.03.30
1655  (0) 2022.03.27