📝 문제 요약
> S사에서는 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.
부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.
https://programmers.co.kr/learn/courses/30/lessons/12982
코딩테스트 연습 - 예산
S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는
programmers.co.kr
- d에는 부서별로 신청한 금액이 각각 들어있다. budget은 회사의 예산이다. 우리는 budget과 d 원소들을 이용해 최대 몇 개의 부서에게 예산을 지원해줄 수 있는 지를 나타내야한다.
🎨 풀이
💡 첫번째 시도 = 성공(은 아니지만 다른 코드가 기억이 안난다 ㅠㅠ)
def solution(d, budget):
answer = 0
d.sort()
for num in d:
budget -= num
if budget < 0 :
return answer
else :
answer += 1
return answer
> 이 코드의 핵심은 d 배열을 정렬한 후 앞에서부터 하나씩 가능한지 비교해나가는 것이다. 최대한 많은 부서를 지원하기 위해서는 예산을 적게 요구하는 곳부터 충당해주어야하기 때문이다.
1. 먼저 예산을 낮은 순서대로 정렬을 한다.
2. d 배열을 for문을 돌리면서 budget - num 을 해준다.
3-1. 만약 budget이 0이라면 answer을 리턴해준다.
3-2. 만약 budget이 아직 0이 아니라면 answer에 1을 더해준다. (부서 하나 더 지원해줄 수 있다는 뜻이다)
4. for문 다 돌았으면 answer을 리턴해준다. (모든 부서를 다 지원한 경우)

끝~
⭐ 느낀점
> 이 문제도 좀 쉬웠던 것 같다. 하하 이런 문제만 매일 나왔으면 좋겠다. 그러면 발전이 없겠지? 허허..^^ 열심히 해봐야겠다. 요즘 좀 제자리 걸음하는 느낌도 살짝 든다. 쉬운 문제만 리뷰해서 그런가..? 그럴 수도 있겠다는 생각이 든다. 나는 뭔가 어디서 많이 멘붕이 왔거나, 이거는 안되겠다 싶은 그런 문제들을 해결할 때 발전을 했던 것 같은데 요즘에는 그냥 할만한 문제들만 풀어서 그런 것 같다. 레벨2를 빡세게 해봐야겠다.
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Level 1] 2016년 (파이썬) (0) | 2022.04.12 |
---|---|
[프로그래머스 / Level 1] 두 개 뽑아서 더하기 (파이썬) (0) | 2022.04.11 |
[프로그래머스 / Level 1] 3진법 뒤집기 (파이썬) (0) | 2022.04.09 |
[프로그래머스 / Level 1] 약수의 개수와 덧셈 (파이썬) (0) | 2022.04.08 |
[프로그래머스 / Level 1] 폰켓몬 (파이썬) (0) | 2022.04.07 |