Just Fighting

[프로그래머스] 예산 본문

Algorithm/코딩테스트 연습

[프로그래머스] 예산

yennle 2022. 6. 15. 12:16
728x90

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

 

코딩테스트 연습 - 예산

S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는

programmers.co.kr

 

 

< 문제 설명 >

그림과 같은 입력이 주어진다.

d는 각 부서에서 신청한 금액이고, budget은 예산이다.

예산안에서 금액을 줄수있는 부서의 최대 개수를 리턴하라.

금액보다 덜 줄 수는 없다.

 

 

< 문제 이해 >

처음에는 combinations를 사용해서 풀면 되겠다고 생각했으나

시간초과가 나왔다. 그래서 조금 더 단순하게 풀 수 있는 방법을 생각해보았는데,

금액을 정렬해서 앞에서부터 더해가면서 예산을 넘지않는 최대 개수를 구하는 방법을 생각했다.

 

 

< 문제 풀이 >

먼저 배열 d를 정렬하고, 0부터 i 까지의 합을 구해 budget보다 클 때까지 for문을 돌리는 것으로 구현했다.

def solution(d, budget):
    d.sort()

    for i in range(len(d)):
        if sum(d[0:i+1]) <= budget:
            continue
        else:
            return i

    return len(d)

 

 

< 풀이 개선 >

다른 코드들을 보니까 내가 sum()을 사용해서 시간이 훨씬 오래 걸린다는 것을 깨달았다.

sum()보다는 하나씩 더하는 방식을 사용했다.

이렇게 푸니까 시간이 훨씬 단축됐다.

def solution(d, budget):    
    d.sort()
    
    tot = 0
    for i in range(len(d)):
        tot += d[i]
        if tot > budget:
            return i
        
    return len(d)

 

 

728x90

'Algorithm > 코딩테스트 연습' 카테고리의 다른 글

[프로그래머스] 소수 만들기  (0) 2022.06.15
[백준] 수 정렬하기 2  (0) 2022.06.13
[백준] 수 정렬하기 3  (0) 2022.06.06
[백준] 뒤집힌 덧셈  (0) 2022.06.02
[백준] 운동  (0) 2022.05.26
Comments