algo lev-1 예산 (python)
제한된 예산안에서 최대한 많은 부서에게 물품을 구매해주려고 합니다.
물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.
최대 몇 개의 부서에 물품을 지원해 줄 수 있는지 return 하도록 solution 함수를 완성해주세요.
출처 : 프로그래머스 Level1
내가 푼 풀이
횟수를 cnt로 풀이.py
def solution(d, budget):
d.sort()
cnt = 0
for value in d:
if value <= budget:
budget -= value
cnt += 1
return cnt
처음에 최대라는 조건을 잘 안읽고 큰 예산부터 처리해야겠다는 생각에 무작정 d.sort(reverse=True)
를 써서 틀렸다. 문제를 잘 읽자! ㅋ.ㅋ
최대한 많은 부서의 구매를 처리하기 위해, 예산이 적은 팀부터 처리했다. 오름차순으로 정렬한 뒤, 앞의 작은 값들부터 해결! 따로 cnt를 둬서 계산한 횟수를 셌고, if 문이 실행된 횟수가 부서에게 예산에 맞게 구매를 실시한 횟수기 때문에 cnt를 반환했다.
enumerate()를 사용한 풀이.py
def solution(d, budget):
d.sort()
for idx, value in enumerate(d):
if value <= budget:
budget -= value
else:
idx -= 1
break
return idx+1
따로 cnt를 정하지 않고 enumerate()를 사용한 풀이! idx는 0부터 시작하기 때문에 return idx+1
을 해줘야 한다.
+)
idx -= 1
을 해야하는 이유는 else 조건에 걸리기 이전에 해당하지 않는 idx 값이 +1 추가로 들어오기 때문이다. 원하는 값이 idx = 2 여도 else 조건을 만나 break가 되려면 앞선 for에 걸려서 idx += 1 이 되기 때문에 (!) 그럴 경우에는 idx -= 1
을 해줘야 바른 값을 구할 수 있다. (말로 하려니 뭔가 이상하다)
value의 더해지는 값 != budget
인 경우에 이런 일이 생기는 듯
Comments