백준 문제 링크
- 보석의 개수를 array에 받아주고 정렬 후
start = 1, end = max(array)로 지정한다.- 기본 이분 탐색 코드에서 cnt = 0으로 지정한다.(아이들의 수)
for문으로 array의 원소를 살펴보는데,
- 원소를 mid로 나눴을 때 나머지가 0이면 cnt += 원소 // mid
- 원소를 mid로 나눴을 때 나머지가 0이 아니면 cnt += 원소 // mid + 1
- 그 다음 조건은 아래와 같다.
- 만약 cnt가 아이들의 수 N보다 작거나 같으면
result = mid, end = mid - 1- 만약 cnt가 아이들의 수 N보다 크다면
start = mid + 1
- result를 출력하면 끝!
N, M = map(int,input().split())
array = []
for _ in range(M):
array.append(int(input()))
array.sort()
start, end = 1, max(array)
result = 0
while start <= end:
mid = (start + end) // 2
cnt = 0
for i in array:
if i % mid == 0:
cnt += i // mid
else:
cnt += i // mid + 1
if cnt <= N:
result = mid
end = mid - 1
else:
start = mid + 1
print(result)