본문 바로가기
2021/코딩테스트

[프로그래머스] Lv.1 - 예산 (Python)

by 에이도 2020. 12. 21.

https://programmers.co.kr/learn/courses/30/lessons/12982?language=python3

 

Sol1) 

  1. d를 오름차순으로 정렬합니다.
  2. 예산이 적은 부서일수록 index가 낮기 때문에 index가 0인 부서부터 예산을 할당합니다.
  3. 예산을 할당하면, 그 부서는 pop으로 빼고, answer(예산 할당 부서의 수)을 1 추가합니다.
def solution(d, budget):
    answer = 0
    d.sort()
    while budget > 0:
        if budget - d[0] >=0 :
            budget -= d.pop(0)
            answer += 1
        else:
            return answer
    
    return answer

print(solution([1,3,2,5,4],9))
    
[out]
3
    

하지만 저는 런타임 에러를 마주했습니다..! 

 

 

Sol2) 

def solution(d, budget):
    answer = 0
    while budget > 0:
        if budget - min(d) >=0 :
            budget -= min(d)
            d.remove(min(d))
            answer += 1
        else:
            return answer
    
    return answer

print(solution([1,3,2,5,4],9))
    
[out]
3
    

sort가 시간이 좀 걸린다는 글을 보았던게 기억이 났습니다.

sort를 빼고 min()을 사용해보았습니다.

하지만 이도 런타임 에러..! 

 

Sol3) 

def solution(d, budget):
    answer = 0
    d.sort()
    for i in d:
        if budget - i >=0 :
            budget -= i
            answer += 1 
        else:
            return answer
        
    return answer
print(solution([1,3,2,5,4],9))
    
[out]
3
    
  1. 부서를 오름차순으로 정렬한다
  2. 예산이 적은 부서부터 예산을 할당하고, answer(예산 할당 성공 부서의 수) 1을 추가한다.
  3. 예산이 0보다 작아질 경우, answer return한다.

*기존 리스트 d에서 예산 할당한 부서 빼주지 않게 다시 구성했습니다. -> 성공!

 

댓글