문제이해
가지고 있는 랜선의 길이를 통해서 N개의 랜선을 만들기위한
최대길이를 구하기
자른 랜선의 길이에서 나머지는 그냥 버림
이분탐색
- 배열의 가운데 요소를 선택합니다.
- 가운데 요소가 찾고자 하는 값과 동일한지 확인합니다.
- 만약 가운데 요소보다 찾고자 하는 값이 크다면, 가운데 요소의 오른쪽 부분을 새로운 탐색 범위로 설정합니다.
- 만약 가운데 요소보다 찾고자 하는 값이 작다면, 가운데 요소의 왼쪽 부분을 새로운 탐색 범위로 설정합니다.
- 이 과정을 찾고자 하는 값을 찾을 때까지 또는 더 이상 탐색할 요소가 없을 때까지 반복합니다.
-> 길이가 될수있는 가장작은 최소값 : 1
-> 길이가 될수있는 가장 큰값 : 가지고있는 랜선 중 가장 큰값
-> 만약 각 랜선의 길이를 중간값으로 나눠서 그 개수를 모아서 우리가 확보해야하는 개수 N개보다 작을경우에는 중간값을 더 작게 분할해야 하므로 가장큰값을 중간값 - 1 로 갱신해서 반복하기
K , N = map(int,input().split()) # K가지고있는개수 , N필요한 개수
arr = []
for _ in range(K):
cm = int(input())
arr.append(cm)
max_v = max(arr)
min_v = 1
# 가장 짧은 길이 : 1
# 가장 긴 길이 : max_v
# 이분탐색
while min_v <= max_v:
mid = (min_v+max_v) // 2
result = 0
for i in arr:
result += i//mid
if result < N :
max_v = mid - 1
else :
min_v = mid + 1
print(max_v)