[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라는 카운터 변수에 하나씩 수를 올려주는 식으로 구했다.

좋은 웹페이지 즐겨찾기