ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 예산(LV3)
    알고리즘 2020. 7. 25. 02:21

     

     

    200723 기상

    떡볶이 시켜서 바로 일어남


     

    👊🏼문제 설명

    국가의 역할 중 하나는 여러 지방의 예산 요청을 심사하여 국가의 예산을 분배하는 것입니다. 국가예산의 총액은 미리 정해져 있어서 모든 예산 요청을 배정해 주기는 어려울 수도 있습니다. 그래서 정해진 총액 이하에서 가능한 한 최대의 총예산을 다음과 같은 방법으로 배정합니다. 예를 들어, 전체 국가예산이 485이고 4개 지방의 예산 요청이 각각 120, 110, 140, 150일 때, 상한액을 127로 잡으면 위의 요청들에 대해서 각각 120, 110, 127, 127을 배정하고 그 합이 484로 가능한 최대가 됩니다. 각 지방에서 요청하는 예산이 담긴 배열 budgets과 총예산 M이 매개변수로 주어질 때, 위의 조건을 모두 만족하는 상한액을 return 하도록 solution 함수를 작성해 주세요.

    제한 사항

    지방의 수는 3 이상 100,000 이하인 자연수입니다.

    각 지방에서 요청하는 예산은 1 이상 100,000 이하인 자연수입니다.

    총예산은 지방의 수 이상 1,000,000,000 이하인 자연수입니다.

     

     

     

    budgets

    M

    return

    [120, 110, 140, 150]

    485

    127

    1. 첫 번째

     

    def check(budgets,M,ceiling):
        cnt=0
        for i in budgets:
            if i<ceiling: # mid(중간값)
                cnt+=i
            else :
                cnt +=ceiling
        if cnt > M: # cnt 가 클 경우는 예산이 넘어가는 경우이기때문에 False 해서 last를 조정해야함 
            return False
        else : # cnt가 작을 경우는 예산이 적을경우,같은 경우 True해서 first 조정 
            return True
        
        
    def solution(budgets, M):
        answer = 0
        
        first= int(M/ len(budgets)) #예산의 상안이 정해지면 상안보다 더 많이 받는 곳 X 
        					   #그러므로 전체 예산에서 n분의 한 것이 최소의 상안
        budgets.sort() # 예산 오름차순. 
        if sum(budgets) <= M : return budgets[-1] # 예산을 다 줄 수 있으면 그냥 맨 뒤에 값 출력. 
        last = budgets[len(budgets)-1] #가장 최대값을 상안으로 설정하면 최대 상안(최대 예산은 넘겠지만)+
        while(last>=first): #탐색
            mid= int((last+first)/2) # 중간값 구함.
            
            if check(budgets,M,mid): 
                if answer< mid: # answer mid에 맞게 바꿔주기. 
                    answer=mid 
                first=mid + 1 # 예산이 적을경우, mid 뒤로 조정
            else :                  
                last =mid - 1 # 예산이 클 경우, mid를 앞으로  조정 
        
        return answer

     


    느낀 점

    🤦🏻‍♂️

    어렵다 어려워

    공부 너무 안 해 진짜

    댓글

Designed by Tistory.