PS (Problem Solving)/Baekjoon

[백준] 2512. 예산

캐럿노트 2022. 7. 12. 00:26

문제

https://www.acmicpc.net/problem/2512

 

2512번: 예산

첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상

www.acmicpc.net

 

설계

- 이분탐색

- 백준 [2805. 나무자르기] 문제와 연결하니 좀 더 쉽게 접근할 수 있었다.

N = int(input())
arr = list(map(int, input().split()))
M = int(input())
start, end = 1, max(arr)

switch = 1
while switch:
    mid = (start + end) // 2
    sumV = 0
    for i in arr:       # 상한액 기준 합 계산
        if mid > i:
            sumV += i
        else:
            sumV += mid

    if start > end:     # 종료 조건
        switch = 0

    if sumV <= M:       # 국가예산 범위
        start = mid + 1
    else:
        end = mid - 1

print(mid)