Notice
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
- 실버
- spring
- 백준
- BFS
- AIVLE
- 오블완
- 알고리즘
- 프로그래머스
- sql
- 골드
- Level2
- Java
- AI트랙
- 패스트캠퍼스
- Level3
- 트리
- Level1
- 그래프
- dfs
- python
- 정렬
- KT에이블스쿨
- 파이썬
- kt에이블스쿨5기
- 딕셔너리
- dp
- KT 에이블스쿨
- 티스토리챌린지
- join
- 구현
Archives
- Today
- Total
rose_brown
[프로그래머스] 거스름돈 본문
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12907
2. 코드
python 1
def solution(n, money):
mod = 1000000007
dp = [0] * (n+1)
dp[0] = 1
for coin in money:
for i in range(coin, n+1):
dp[i] += dp[i-coin]
return dp[n] % 1000000007
풀이
- dp[i]를 금액 i를 만드는 경우의 수로 정의하고, dp[0] = 1로 초기화
→ 0원을 만드는 방법은 "아무 동전도 쓰지 않는 방법" 1가지
- 동전 하나씩 반복하며 가능한 금액(i) 갱신
- 각 coin에 대해 i를 coin 이상부터 n까지 탐색
- dp[i] += dp[i - coin]
- → 금액 (i - coin)에 coin 하나를 추가한 조합이 금액 i를 만드는 방법
- 모든 동전에 대해 반복하면서 dp 테이블을 채움
- 최종 n원을 만드는 경우의 수 출력
3. 메모
- 반복 계산하는 부분을 최소화 → DP사용해서 최소화 함
- 점화식을 어떻게 해야 하는지 고민해야 하는 문제
- dp[i] = 금액 i를 만드는 경우의 수
- dp[i] += dp[i - coin] : coin을 하나 더 붙이면 i원이 되는 구조
- 조합 문제이므로 동전이 바깥 루프에 있어야 순서 중복 방지
'코딩 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 퍼즐 조각 채우기 (0) | 2025.06.12 |
---|---|
[프로그래머스] 메뉴 리뉴얼 (0) | 2025.04.24 |
[프로그래머스] 문자열 나누기 (0) | 2025.04.08 |
[프로그래머스] 개인정보 수집 유효기간 (0) | 2025.04.08 |
[프로그래머스] 성격 유형 검사하기 (0) | 2025.03.24 |