Study/Baekjoon

[백준/C++] 1654 랜선자르기

에린_1 2024. 2. 26. 14:32
728x90

1654 랜선자르기

#include <bits/stdc++.h>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int k, n;
	cin >> k >> n;
	vector<unsigned int> arr(k);
	unsigned int right = 0, left = 1, mid, ans = 0;
	for (int i = 0; i < k; ++i)
	{
		unsigned int tmp;
		cin >> tmp;
		arr[i] = tmp;
		right = max(right, tmp);
	}

	while (left <= right)
	{
		unsigned int check = 0;
		mid = (right + left) / 2;
		for (int i = 0; i < k; ++i)
			check += arr[i] / mid;
		if (check >= n)
		{
			left = mid + 1;
			ans = max(mid, ans);
		}
		else
			right = mid - 1;
	}
	cout << ans;

	return 0;
}
  • 이분 탐색을 사용해야 하는 문제
  • 주어진 랜선중 가장 긴 크기가 right가 된다.
  • 정답이 나와도 최대가 아닐 수 있기 때문에 최대를 구해야 한다.
728x90

'Study > Baekjoon' 카테고리의 다른 글

[백준/C++] 1620 나는야 포켓몬 마스터 이다솜  (0) 2024.02.28
[백준/C++] 1003 피보나치 함수  (0) 2024.02.26
[백준/C++] 10816 숫자 카드2  (0) 2024.02.25
[백준/C++] 9012 괄호  (0) 2024.02.25
[백준/C++] 9012 괄호  (0) 2024.02.23