반응형

문제풀이

1. 신청한 예산을 모두 주거나 안주거나이므로 신청한 예산이 가장 작은 것 부터 처리해야한다.

2. 따라서 정렬한 후 i번째 요소까지의 합이 예산 총액의 합보다 작거나 같은 동안 i를 하나씩 늘려간다.

ex) sum(d[0:1]) 이 d보다 작으면, sum(d[0:2])를 다시 d와 비교한다.

 

* 풀이2

1. d를 정렬한 후, budget이 음수가 되기 직전까지 budget에서 d의 첫번째 요소부터 빼줍니다. (budget이 음수가 되면, 더이상 예산을 지급할 수 없다는 것을 의미합니다.)

2. enumerate를 이용하면 budget이 음수가 될 때의 i 값을 찾을 수 있습니다.

Python Code

1
2
3
4
5
6
7
8
def solution(d, budget):
    l = len(d)
    i=0
    d=sorted(d)
    while i-1<and sum(d[:i+1]) <= budget:
        i += 1
    
    return min(i,l)
cs
1
2
3
4
5
6
7
8
9
10
11
# sol2
def solution(d, budget):
    if sum(d) <= budget:
        return len(d)
    for i,v in enumerate(sorted(d)):
        if budget >= v :
            budget -= v
        else :
            return i
    
    return i
cs

문제 링크

 

코딩테스트 연습 - 예산

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는

programmers.co.kr

 

반응형

+ Recent posts