본문 바로가기
Algorithm/Python

[Python] 백준 - 2512번 예산(Binary Search)

by 힘팽 2022. 2. 27.

◈ 오류 정정 및 피드백 환영

 

2512번: 예산

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

www.acmicpc.net


🔎문제 분석

랜선 자르기와 유사한 문제로 이분탐색(Binary Search)으로 접근하면 된다.

 

[Python] 백준 - 1654번 랜선 자르기(Binary Search)

◈ 오류 정정 및 피드백 환영 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000

notepad-for-hp.tistory.com

예산이 모자랄 경우 상한액이 너무 낮은 것이므로 탐색 범위를 넓히면 되고, 예산을 초과하면 상한액을 줄여야하므로 탐색 범위를 좁히면 된다. 랜선 자르기와 마찬가지로 예산이 정확하게 맞아 떨어지더라도 최대 예산을 구해야 하므로 탐색 범위를 넓혀야 한다.


import sys
input = sys.stdin.readline
n = int(input())
a = list(map(int, input().split()))
m = int(input())

l = 0
r = max(a)
while l<=r:
    mid = (l+r)//2
    budget = list(map(lambda x: mid if x>mid else x, a))
    amt = sum(budget)
    if amt <= m:
        l = mid+1
    else:
        r = mid-1
print(r)

댓글