/ ALGORITHM

(프로그래머스 with python) 예산


LEVEL1 예산

https://programmers.co.kr/learn/courses/30/lessons/12982


이 문제도 쉽게 풀렸다. ! 지금 내 실력이 딱 프로그래머스 level1수준인듯 하다. 5문제중 3문제정도는 쉽게 푸는 실력이랄까… 백준과 병행해서 풀고 있는데 silver 2~4부터는 어렵다.. ㅠ 아이디어를 떠올리는게 너무 어렵다… level2 푸는 날이 조금 두렵다.. 방법은 하나인듯 하다.. ^^ 많이 풀어보자…


나는 정렬을 한 뒤 budget값이 d리스트에 있는 특정 원소보다 작을 경우 for문에서 벗어나게 작성하였다

def solution(d, budget):
    answer = 0
    d.sort()
    for i in range(len(d)):
        if budget < d[i]:
            break
        budget -= d[i]
        answer += 1
    return answer

solution([2,2,3,3], 10)


다른 코드를 봤을때 비슷하다. 단지 조건을 0보다 작으면으로 설정했는데 이게 속도면에서 좀 더 빨랐다. 미리 budget에서 값을 빼고 뺀값이 0보다 작은지를 확인했다. 순서가 살짝 다르다

def solution(d, budget):
    d.sort()
    answer = 0
    
    for i in d:
        budget -= i
        if budget < 0:
            break
        answer += 1
        return answer


sum을 사용해서 더 간단하게 처리가 가능하다. 하지만 아래의 코드는 시간 복잡도가 o(n^2)이기 때문에 효율성 면에서는 그렇게 좋지 못한듯 싶다..

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