https://www.acmicpc.net/problem/6236
6236번: 용돈 관리
현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로
www.acmicpc.net
K원을 통장에서 빼서 K원을 가지고 일주일 동안 몇번을 뺄 수 있는지 검사하는 문제이다.
K의 범위는 max(money) ~ sum(money) 이다
=> 일단 sum(money)를 가지고 있으면 통장에서 돈 뺄일 없이 가지고 있는 돈으로 계속 활용 가능하기 때문
=> 사실상 K는 1부터 시작해도 되긴함. 하지만 max(money)값 부터 시작하는 이유는 1 ≤ M ≤ N 조건 때문인데
n이 7이라면 m의 최댓값은 7이 될텐데 7번 모두 무사히 빼려면 max(money)를 들고있어야 가능함
n,m = list(map(int,input().split()))
money = []
for _ in range(n):
money.append(int(input()))
start = max(money)
end = sum(money)
res = 0
while start <= end:
mid = (start+end)//2
temp = mid
cnt = 1
for i in range(n):
if temp < money[i]:
temp = mid
cnt += 1
temp -= money[i]
if cnt > m:
start = mid + 1
else:
end = mid - 1
res = mid
print(res)
'Algorithm > Algorithm Problem' 카테고리의 다른 글
백준 3079 입국심사(이분탐색) (0) | 2022.07.10 |
---|---|
백준 2251 물통(BFS) (0) | 2022.07.03 |
백준 10451 순열 사이클(DFS, Union-Find) (2) | 2022.06.27 |
백준 1326 폴짝폴짝(BFS) (0) | 2022.06.26 |
백준 16112 5차 전직(그리디) (0) | 2022.06.26 |