첨에 문제 읽고 이게 뭔소리야... 싶었는데
그냥 2343 기타 레슨 문제랑 비슷한 문제인 것 같다
돈이 모자라면 다시넣고 어쩌구 더 남더라도 M번을 맞추기 위해 어쩌구
기타 레슨 문제로 생각하면 걍 강의를 순서대로 녹화해야 하고 (날짜 순서대로 돈을 씀) 블루레이 개수에 맞추는 (M번 인출 횟수를 맞추는) 거라고 생각하니까 이해가 됐다
입력받는 부분 빼고 2343 기타 레슨 문제와 코드 똑같이 썼더니 맞았다 ㅎㅎ
# 6236 용돈 관리
n, m = map(int, input().split())
arr = list()
for i in range(n):
arr.append(int(input()))
def binary_search(start, end):
result = 0
while start <= end:
mid = (start + end) // 2 # 인출할 돈 단위 k
total = mid # 인출한 돈
cnt = m # 인출 횟수
# 날짜 순서대로 용돈 사용
for x in arr:
# 돈 액수만큼 차감시킴
if total >= x:
total -= x
# 돈이 모자랄 경우
else:
total = mid
cnt -= 1
# 인출 횟수가 m번을 넘어가거나 하루에 쓸 돈이 k보다 클 경우
if cnt <= 0 or x > mid:
cnt = -1
break
else:
total -= x
# 쓸 돈보다 인출할 돈이 작을 경우
if cnt <= 0:
start = mid + 1
else:
result = mid
end = mid - 1
return result
print(binary_search(1, sum(arr)))