반응형
문제풀이
1. 신청한 예산을 모두 주거나 안주거나이므로 신청한 예산이 가장 작은 것 부터 처리해야한다.
2. 따라서 정렬한 후 i번째 요소까지의 합이 예산 총액의 합보다 작거나 같은 동안 i를 하나씩 늘려간다.
ex) sum(d[0:1]) 이 d보다 작으면, sum(d[0:2])를 다시 d와 비교한다.
* 풀이2
1. d를 정렬한 후, budget이 음수가 되기 직전까지 budget에서 d의 첫번째 요소부터 빼줍니다. (budget이 음수가 되면, 더이상 예산을 지급할 수 없다는 것을 의미합니다.)
2. enumerate를 이용하면 budget이 음수가 될 때의 i 값을 찾을 수 있습니다.
Python Code
1
2
3
4
5
6
7
8
|
def solution(d, budget):
l = len(d)
i=0
d=sorted(d)
while i-1<l and sum(d[:i+1]) <= budget:
i += 1
return min(i,l)
|
cs |
1
2
3
4
5
6
7
8
9
10
11
|
# sol2
def solution(d, budget):
if sum(d) <= budget:
return len(d)
for i,v in enumerate(sorted(d)):
if budget >= v :
budget -= v
else :
return i
return i
|
cs |
문제 링크
코딩테스트 연습 - 예산
S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는
programmers.co.kr
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 2주차 python (0) | 2021.08.21 |
---|---|
[프로그래머스] 오픈채팅방 Python (0) | 2021.07.02 |
[프로그래머스] 신규 아이디 추천 - Python (0) | 2021.04.03 |
[프로그래머스] 3진법 뒤집기 - Python (0) | 2021.02.08 |
프로그래머스 불량 사용자 (0) | 2020.12.03 |