백준 알고리즘 2512번 : 예산 파이썬 코드 <문제풀이>

2022. 3. 3. 20:56알고리즘 문제풀이

반응형

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

 

2512번: 예산

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

www.acmicpc.net

import sys;input=sys.stdin.readline
import bisect
N=int(input())
jibang=list(map(int,input().split()))
M=int(input())
psum=[ 0 for _ in range(N+1)]
jibang.sort()

s=sum(jibang)
if s < M:
    print(jibang[-1])
    sys.exit()

for i in range(1,N+1):
    psum[i]=psum[i-1]+jibang[i-1]

left,right=0,jibang[-1]
i=0
while left<=right:
    mid=(left+right)//2

    point=bisect.bisect_left(jibang,mid)
    t_sum=psum[point] + mid * (N-point)

    if t_sum>M:
        right=mid-1
    else:
        left=mid+1
            
print(right)

 

이분탐색은 꾸준한 연습이 필요한 분류의 문제라는 걸 다시한번 느꼈다.

실버 3인데도 힘들었다 -_-

그래도 최적화를 위해서 누적합을 활용했던 것은 잘한 점이다.

반응형