Link https://www.acmicpc.net/problem/1654
결과 2148 KB / 4ms
언어 C++ 17
풀이
이분탐색을 이용해 정답을 유도하는 과정
초기 범위를 1 ~ 최대값으로 설정하고 최대 랜선 길이를 구하는 함수를 통해 구분을 한다.
기준 값은 현재까지의 최대 값을 기준으로 left와 right를 구분한다.
소스코드
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int getMax(vector<int> input) {
int res = 0;
for (unsigned int i = 0; i < input.size(); i++)
if (res < input[i])
res = input[i];
return res;
}
long long getMax(long long ll1, long long ll2)
{
return ll1 < ll2 ? ll2 : ll1;
}
long long getCount(vector<int> input, long long cut) {
long long res = 0;
for (unsigned int i = 0; i < input.size(); i++)
res += (input[i] / cut);
return res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
long long n, tar; cin >> n >> tar;
vector<int> input(n); for (long long i = 0; i < n; i++) cin >> input[i];
long long left = 1, right = getMax(input);
long long res = 0;
while (left <= right)
{
long long mid = (left + right) / 2;
if (tar > getCount(input, mid))
right = mid - 1;
else {
left = mid + 1;
res = getMax(res, mid);
}
}
cout << res;
return 0;
}
'Algorithm > Binary Search' 카테고리의 다른 글
Baekjoon 2512 예산 (0) | 2019.11.11 |
---|---|
Baekjoon 1620 나는야 포켓몬 마스터 이다솜 (0) | 2019.06.02 |
BaekJoon 1072 게임 (0) | 2019.02.16 |
Baekjoon 2110 공유기 설치 (2) | 2019.02.13 |
Baekjoon 2805 나무 자르기 (0) | 2019.02.13 |