문제 링크 : 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 |