본문 바로가기

알고리즘

파이썬)예산

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

 

2512번: 예산

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

www.acmicpc.net

 

 

n = int(input())

arr = list(map(int, input().split()))
money = int(input())

start = 0
end = max(arr)

max_log = 0

if sum(arr) <= money:
    print(max(arr))

else:
    while start <= end and start <= money:
        mid = (start + end) // 2

        log = 0
        for i in arr:
            if i > mid:
                log += mid
            else:
                log += i
        if log <= money:
            if max_log < log:
                max_log = log
            start = mid + 1
        else:
            end = mid - 1

    print(end)

해당 문제는 이분법으로 간단하게 풀 수가 있다.

start를 0으로,

end를 max(arr)로 정한 다음, 

모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정한다

라는 조건을 검사한 후 while문을 돌린다.

'알고리즘' 카테고리의 다른 글

파이선)꼬인 전깃줄  (0) 2023.06.09
파이썬) 연구소  (0) 2023.06.04
프로그래머스) 대충 만든 자판  (0) 2023.05.08
프로그래머스) 달리기 경주  (0) 2023.04.16
프로그래머스) 공원 산책  (0) 2023.03.24