이진 탐색 기초 문제
https://www.acmicpc.net/problem/2805
https://www.acmicpc.net/problem/13702 와 매우 유사하다.
문제에서 주어진 '단, 항상 N ≤ K 이다.' 가 중요한 힌트. 핵심을 하나씩 체크하자.
import sys
input = sys.stdin.readline
N, K = map(int, input().rstrip().split())
mak = [int(input()) for _ in range(N)]
s = 0
e = 2**31 - 1
ans = 0
def check(x):
cnt = 0
for j in range(len(mak)):
a = mak[j]
while a >= x:
a -= x
cnt += 1
return cnt >= K # 잔의 수가 사람 수 보다 많은 수 있다! 체크 체크
while s <= e:
mid = (s+e) // 2
if check(mid):
ans = mid
s = mid + 1
else:
e = mid - 1
print(ans)
조금씩 내 알고리즘 실력이 느는 느낌이다.