코딩관계론

[프로그래머스] 예산 본문

개발/알고리즘

[프로그래머스] 예산

개발자_티모 2024. 4. 22. 15:44
반응형

문제 이해하기

부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 계산하는 문제였다. 단 모든 예산을 지원해야 한다.

문제 해결 방법 설명하기

1. 경우의 수 계산하기 

 문제를 풀기 위해서 먼저 경우의 수를 계산해야 하는데 부서별 지원여부를 두고 경우의 수를 계산하면 2(해당 부서의 지원 여부 O or x)^100(부서의 개수)가 나오게 되고, 제한시간안에 문제를 해결할 수 없다. 따라서 완전 탐색은 사용할 수 없게 된다.

 최대한 많은 부서에 예산을 지원하면 되기 때문에 예산 요청이 작은 순으로 지원하면 된다. 따라서 그리디하게 지원하면 문제를 해결할 수 있다. 

코드

def solution(d, budget):
    answer = 0
    d.sort()
    
    for i in range(len(d)):
        if budget - d[i] >= 0:
            budget -= d[i]
            answer += 1
        else:
            break   
        
    return answer




if __name__ == "__main__":
    d = [1, 3, 2, 5, 4]
    budget = 9
    print(solution(d, budget))  # 3

코드 리뷰

다른 사람의 코드인데 상당히 참고할 만 하다. 단점은 sum에서 O(N)의 시간이 걸리지만 문제를 d의 크기가 작으니 상관없다.

def solution(d, budget):
    d.sort()
    while budget < sum(d):
        d.pop()
    return len(d)

 

배운점 정리하기

pop과 sum을 이용하면 굉장히 편하다.

반응형