백준 1654

HR·2022년 6월 2일
0

알고리즘 문제풀이

목록 보기
37/50

백준 1654 : 랜선 자르기

  1. 이분 탐색이다.
  2. 특정 길이로 자르면 K개 이상의 랜선을 얻을 수 있을까? 를 이용해 매개변수 탐색

정답 코드

#include <iostream>
#include <algorithm>
#include <limits.h>

using namespace std;

int k, n;
long long lines[10001];
int ans;

long long cntLines(long long d) {
	long long ret=0;
	for(int i=0; i<k; i++) {		
		ret += lines[i]/d;
	}

	return ret>=n;
}

int main() {	
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	cin>>k>>n;
	for(int i=0; i<k; i++) {
		cin>>lines[i];
	}

	//binary search
	long long L=0, R=INT_MAX;
	while(L<=R) {
		long long mid = (L+R)/2;
		
		if(cntLines(mid)) { //make answer longer
			ans=mid;
			L = mid+1;
		}
		else { //make shorter
			R = mid-1;
		}
	}
	
	cout<<ans<<'\n';
	
	return 0;
}

int 와 long long 범위를 잘 고려하자.

0개의 댓글