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

물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.

부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • d는 부서별로 신청한 금액이 들어있는 배열이며, 길이(전체 부서의 개수)는 1 이상 100 이하입니다.
  • d의 각 원소는 부서별로 신청한 금액을 나타내며, 부서별 신청 금액은 1 이상 100,000 이하의 자연수입니다.
  • budget은 예산을 나타내며, 1 이상 10,000,000 이하의 자연수입니다.

입출력 예

dbudgetresult

[1,3,2,5,4] 9 3
[2,2,3,3] 10 4

 

 

def solution(d, budget):
    answer = 0    #예산을 받을 수 있는 부서의 수
    d.sort()      #최대한 많은 부서를 주어야하기 때문에 예산이 적은 부서들을 위주로 정렬
    sum = 0       #부서에게 지급될 예산의 합
    
    for i in d:   #루프를 돌려 각 부서들의 예산을 더해서 budget보다 작으면 루프 탈출
        if sum + i <= budget:  
            sum += i
            answer += 1
        else:
            break
    return answer

sum과 budget을 비교해서 처음 코드를 세웠는데 계속 몇 테스트케이스에서 에러가 났다. 그 이유는 문제를 제대로 안봐서..ㅎㅎ

'최대한 많은 부서' 라고 문제에 주어졌음에도 정렬을 하지 않았었다.

앞으로는 문제를 성심성의껏 읽기^^

 

 

 

다른 사람의 풀이

def solution(d, budget):
    d.sort()
    cnt = 0

    for i in d :
        budget -= i
        if budget < 0 :
               break
        cnt += 1
    return cnt

예산에서 부서들의 신청금액을 빼서 찾는 것도 괜찮은 방법이다! 거꾸로 연산 ㅇㅋㅇㅋ

 

 

 

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

pop은....흠...냐링...ㅎㅎㅎㅎㅎㅎㅎㅎㅎ 스택/큐 공부를 다시 한 후에 확인해보자!

'Algorithm' 카테고리의 다른 글

programmers #시저암호  (0) 2021.08.07
programmers #체육복(정답아님)  (0) 2021.08.07
programmers #2016년  (0) 2021.08.06
programmers #완주하지 못한 선수  (0) 2021.08.05
programmers #모의고사  (0) 2021.07.29

+ Recent posts