영벨롭 개발 일지

[백준 BOJ][C++]1654번 랜선 자르기 풀이: 이진 탐색 본문

알고리즘 문제 풀이/BOJ

[백준 BOJ][C++]1654번 랜선 자르기 풀이: 이진 탐색

영벨롭 2022. 5. 4. 19:42

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

 

 

 

 

#include<iostream>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>

using namespace std;

int k, n;
long long ans;
vector<long long> line;

int main(void) {

	cin >> k >> n;

	for (int i = 0; i < k; i++) {
		int x;
		cin >> x;
		line.push_back(x);
	}
	sort(line.begin(), line.end());
	
	long long s = 1;
	long long e = line.back() + 1;

	while (s <= e) {
		long long mid = (s + e) / 2;
		long long sum = 0;

		for (int i = 0; i < k; i++) {
			if (line[i] >= mid) {
				sum += (line[i] / mid);
			}
		}

		if (sum >= n) {
			ans = max(ans, mid);
			s = mid + 1;
		}
		else {
			e = mid - 1;
		}
	}

	cout << ans;

	return 0;
}

 

반응형