C++/백준 C++

C++ 1654 랜선 자르기 [이분 탐색] -> 범위 체크, long long 사용

CE : 하랑 2024. 10. 23. 15:44

 

 

 

코드

#include <iostream>
#include <vector>
#include <algorithm>

long long SerchCount(std::vector<long long>& _nums, long long _M)
{
	long long st = 1;
	long long end = _nums[_nums.size() - 1];

	long long Len = 0;

	while (st <= end)
	{
		long long Sum = 0;
		long long Mid = (st + end) / 2;

		for (int i = 0; i < _nums.size(); i++)
		{
			if (_nums[i] >= Mid)
			{
				Sum += (_nums[i]/Mid);
			}
		}

		if (Sum < _M)
		{
			end = Mid - 1;
		}
		else
		{
			
			Len = Mid;
			st = Mid + 1;
		}
	}

	return Len;
}

int main()
{
	std::vector<long long> nums;
	int  N;
	long long M;

	std::cin >> N >> M;

	nums.resize(N);

	for (int i = 0; i < N; i++)
	{
		std::cin >> nums[i];
	}

	std::sort(nums.begin(), nums.end());

	long long result = SerchCount(nums, M);

	std::cout << result;
	return 0;

}