Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 알람 시스템
- 완전탐색
- 이분탐색
- 구현
- 디버깅
- prg 패턴
- 결제서비스
- 레디스 동시성
- 수신자 대상 다르게
- 깊게 생각해보기
- spring event
- 카카오
- 프로그래머스
- gRPC
- docker
- 백준
- 쿠키
- jwt 표준
- 검색어 추천
- 객체지향패러다임
- 좋은 코드 나쁜 코드
- BFS
- 숫자 블록
- branch 전략
- piplining
- 누적합
- 코드 계약
- 셀러리
- AWS
- 트랜잭샨
Archives
- Today
- Total
코딩관계론
[프로그래머스] 예산 본문
반응형
문제 이해하기
부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 계산하는 문제였다. 단 모든 예산을 지원해야 한다.
문제 해결 방법 설명하기
1. 경우의 수 계산하기
문제를 풀기 위해서 먼저 경우의 수를 계산해야 하는데 부서별 지원여부를 두고 경우의 수를 계산하면 2(해당 부서의 지원 여부 O or x)^100(부서의 개수)가 나오게 되고, 제한시간안에 문제를 해결할 수 없다. 따라서 완전 탐색은 사용할 수 없게 된다.
최대한 많은 부서에 예산을 지원하면 되기 때문에 예산 요청이 작은 순으로 지원하면 된다. 따라서 그리디하게 지원하면 문제를 해결할 수 있다.
코드
def solution(d, budget):
answer = 0
d.sort()
for i in range(len(d)):
if budget - d[i] >= 0:
budget -= d[i]
answer += 1
else:
break
return answer
if __name__ == "__main__":
d = [1, 3, 2, 5, 4]
budget = 9
print(solution(d, budget)) # 3
코드 리뷰
다른 사람의 코드인데 상당히 참고할 만 하다. 단점은 sum에서 O(N)의 시간이 걸리지만 문제를 d의 크기가 작으니 상관없다.
def solution(d, budget):
d.sort()
while budget < sum(d):
d.pop()
return len(d)
배운점 정리하기
pop과 sum을 이용하면 굉장히 편하다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 숫자 타자 대회 (0) | 2024.04.25 |
---|---|
[프로그래머스] 금과 은 운반하기 (1) | 2024.04.24 |
[프로그래머스] 등굣길 (0) | 2024.04.22 |
[프로그래머스] 피로도 (0) | 2024.04.21 |
[프로그래머스] 퍼즐 조각 (0) | 2024.04.16 |