본문 바로가기
알고리즘/이분탐색

백준 1654번 : 랜선 자르기

by Jason95 2021. 1. 21.

문제 링크 : www.acmicpc.net/problem/1654

내 풀이(2021.1.21) :

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

using namespace std;

int lan[10000];
int K, N;

int get_N(int mid) {
	int num = 0;
	for (int i = 0; i < K; i++) {
		num += lan[i] / mid;
	}
	return num;
}

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 >> lan[i];
	}
	sort(lan, lan + K);

	long long start = 1;
	long long end = INT_MAX;
	long long mid;
	int max_mid = 0;
	while (start <= end) {
		mid = (start + end) / 2;
		//cout << "start = " << start << "  end = " << end << "  mid = " << mid << "  n = " << get_N(mid) << "  N = " << N << endl;
		if (get_N(mid) < N) end = mid - 1;
		else if (get_N(mid) >= N) {
			max_mid = max(max_mid, (int)mid);
			start = mid + 1;
		}
	}
	cout << max_mid;

	return 0;
}

'알고리즘 > 이분탐색' 카테고리의 다른 글

백준 2805번 : 나무 자르기  (0) 2021.01.17
백준 1920번 : 수 찾기  (0) 2021.01.16
이분 탐색 개념  (0) 2021.01.16
백준 10815번 : 숫자 카드  (0) 2020.12.31