본문 바로가기

백준 파이썬 코딩

백준 28357 사탕 나눠주기 파이썬

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

 

28357번: 사탕 나눠주기

소수전공 수업을 마무리한 찬우는 축하의 의미로 학생들에게 사탕을 나누어 주려 한다. 구체적으로, 기준이 되는 음이 아닌 정수 $X$를 정한 뒤 최종 점수가 $X$점을 넘는 학생들에게 점수가 높은

www.acmicpc.net

간단한 이분탐색 문제였습니다.

최솟값과 최댓값 설정만 잘해주면 쉽게 풀릴것 같습니다.

def ch(x):#나눠줘야하는 사탕 개수 체크 함
    re = 0
    for i in s:
        if i>x:
            re+=(i-x)
    return re
n,m = map(int,input().split())
s = list(map(int,input().split()))
a,b = 0,max(s)#점수의 최대값이 기준점의 최대값임
#사탕이 많으면 기준점 0으로 해도 됨.
while a<b:#최소가 최대와 같거나 넘겼을때 종료되게 
    mid = (a+b)//2#이분 탐색의 핵심 범위를 반으로 나눠줌.
    midw = ch(mid)#나눈 결과값을 저장
    if midw >m:#사탕이 부족하니 최소 점수를 올려줘야함.
        a = mid+1
    elif midw<=m:#사탕이 남으니까 최대 점수를 내려줘야함.
        b = mid
    
print(a)#최소 점수컷 출력.