[백준] 6236 용돈 관리

새싹·2021년 9월 16일
0

알고리즘

목록 보기
10/49

📌문제 링크

6236 용돈 관리

💡 문제 풀이

첨에 문제 읽고 이게 뭔소리야... 싶었는데
그냥 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)))

0개의 댓글