Algorithms/Binary Search
[이진 탐색 알고리즘] 랜선 자르기 S3
잉숭
2021. 7. 5. 11:21
기출 : BOJ #1654
변경할 값은 랜선의 길이이고 체크할 함수는 만들 수 있는 랜선의 개수를 출력한다
최댓값을 출력하기 때문에 범위를 줄여가면서 최댓값을 갱신한다
# input
answer = 0
k, n = map(int,input().split())
lan = list()
for _ in range(k):
lan.append(int(input()))
# sort
lan.sort()
def check(val):
global lan, n
res = 0
for l in lan:
res += (l//val)
return res
def bs(st, en, target):
global answer
if st>en:
return -1
mid = (st+en)//2
val = check(mid)
if val>=target:
answer = mid
bs(mid+1, en, target)
else:
bs(st, mid-1, target)
bs(0, 2**31-1, n)
print(answer)