나의 브을로오그으

[c++] 1654번 : 랜선 자르기 본문

알고리즘/BaekJoon

[c++] 1654번 : 랜선 자르기

__jhp_+ 2022. 3. 23. 13:59

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

#include <iostream>
#include <limits.h>
using namespace std;

int cutToLineCount(int* LANs, int line, int K)
{
	int cnt = 0;
	for (int i = 0; i < K; ++i)
	{
		cnt += LANs[i] / line;
	}
	return cnt;
}

int cutToLongestLine(int* LANs, int max, int K, int N)
{
	if (cutToLineCount(LANs, max, K) >= N)
	{
		return max;
	}
	int begin = 1;
	int end = max;
	int line = 0;

	while (begin < end)
	{
		line = begin + (end - begin) / 2;
		if (cutToLineCount(LANs, line, K) < N)
		{
			end = line;
		}
		else
		{
			begin = line + 1;
		}
	}

	return begin - 1;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int K = 0;
	int N = 0;
	int max = -1;
	int line = 0;
	cin >> K >> N;

	int* LANs = new int[K];
	for (int i = 0; i < K; ++i)
	{
		cin >> LANs[i];
		max = max > LANs[i] ? max : LANs[i];
	}
	line = cutToLongestLine(LANs, max, K, N);

	cout << line << '\n';

	delete[] LANs;
	return 0;
}

'알고리즘 > BaekJoon' 카테고리의 다른 글

[c++] 1920번 : 수 찾기  (0) 2022.03.25
[c++] 1874번 : 스택 수열  (0) 2022.03.25
[c++] 1436번 : 영화감독 숌  (0) 2022.03.22
[c++] 1259번 : 팰린드롬 수  (0) 2022.03.22
[c++] 1181번 : 단어 정렬  (0) 2022.03.20