본문 바로가기

Programming/BOJ

[백준/C++] 1654번: 랜선자르기 (이분탐색)

 

앞 문제와 같다. long long 자료형으로 써야 틀렸습니다를 안만난다.

 

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


int N, K;
long long lan[10001];

bool condition(int mid) {
	int sum = 0;
	for (int i = 0; i < N; i++) {
		sum += lan[i] / mid;
	}

	if (sum >= K) return true;
	return false;
}

int main() {

	cin >> N >> K;
	
	long long left = 1;
	long long right = 0;
	
	for (int i = 0; i < N; i++) {
		cin >> lan[i];
		right = max(lan[i], right);
	}


	long long ans;
	while (left <= right) {

		long long mid = (left + right) / 2;

		if (condition(mid)) {
			ans = mid;
			left = mid + 1;
		}
		else {
			right = mid - 1;
		}
	}
	cout << ans << '\n';


	return 0;
}