[pro] 예산
문제링크
https://programmers.co.kr/learn/courses/30/lessons/12982
느낀점
처음에 arr.remove(n)으로 풀다가 index out of range가 계속 나서 애를 먹었다. 결국 삭제하고 싶은 값을 -1로 바꿔주고 해당 조건에 -1이 아닌 원소를 대상으로 for문을 돌렸더니 되었다. 깔끔한 풀이법은 아니지만 급할 땐 이렇게라도 풀어야겠다.
풀이
def solution(d, budget):
total = 0
count = 0
answer = 0
d = sorted(d)
if d[0] <= budget:
count = 1
total = d[0]
d.remove(d[0])
for i in range(len(d)):
if d[i] != -1 and (budget - total) >= d[i]:
total += d[i]
count += 1
d[i] = -1
answer = count
else:
answer = 0
return answer
다른 풀이 - 1
def solution(d, budget):
d.sort()
while budget < sum(d):
d.pop()
return len(d)
오름차순으로 정리된 모든 수를 담은 d의 sum과 budget을 바로바로 비교해서 budget보다 sum(d)가 크면 바로 d에서 가장 큰 수인 마지막에 있는 것들을 pop()해주는 풀이법
다른 풀이 - 2
def solution(d, budget):
s = 0
j = 0
d.sort()
for i in range(len(d)):
s += d[i]
if s > budget:
break
else:
j += 1
return j
내가 푼 것과 유사한 풀이인데, s에 d[i]의 값을 계속 더해주면서 만약에 s가 budget보다 크면 바로 break하고 그 전까진 j라는 카운터 변수에 하나씩 수를 올려주는 식으로 구했다.
Author And Source
이 문제에 관하여([pro] 예산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@letsbebrave/pro-예산저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)