importsysfromtypingimportListdefsolution(M:int,nums:List[int])->int:# lt: 최소 num
# rt: 최대 num
lt,rt=0,max(nums)whilelt<=rt:mid=(lt+rt)//2current=0fornuminnums:# 예산(num)이 상한액(mid)보다 클 경우 -> 상한액을 지급해나가면 됨
ifnum>=mid:current+=midcontinue# 예산(num)이 상한액(mid)보다 작을 경우 -> 예산 지급
current+=num# 지급 예정인 금액(current)가 M보다 작거나 같을 경우 -> 상한액을 높여줘야 함
ifcurrent<=M:lt=mid+1continuert=mid-1returnrtN=int(sys.stdin.readline().rstrip())nums=list(map(int,sys.stdin.readline().rstrip().split()))M=int(sys.stdin.readline().rstrip())print(solution(M,nums))
Leave a comment