티스토리 뷰
SMALL
문제 설명
https://www.acmicpc.net/problem/2293
요약) n가지 종류의 동전으로 k원을 만드는 경우의 수를 출력합니다. 동전의 중복 사용이 가능합니다.
예제 입력
3 10
1
2
5
예제 출력
10
- 5,5 / 1,1,1,1,1,1,1,1,1,1 / 1,2,2,5 / 1,1,1,1,1,5 / 2,2,2,2,2 / 1,1,2,2,2,2 / 1,1,1,1,2,2,2 / 1,1,1,1,1,1,2,2 / 1,1,1,1,1,1,1,1,2 / 1,1,1,2,5 로 총 경우의 수가 10가지입니다.
풀이 과정
dp[i]는 i를 만들 수 있는 경우의 수 입니다.
1) 1을 사용해서 10을 만들 수 있는 경우의 수 -> 1만 사용 가능
2) 2를 포함해서 10을 만들 수 있는 경우의 수 -> 1과 2 사용 가능
3) 5를 포함해서 10을 만들 수 있는 경우의 수 -> 1과 2, 5 사용 가능
3개의 경우를 통해 표를 그려보면 dp[i] = dp[i] + dp[i -coin] 이라는 점화식을 도출할 수 있습니다.
https://didu-story.tistory.com/440 저는 바로 이해 안 돼서 이 블로그 보면서 이해했습니다.
n, k = map(int, input().split())
coins = [int(input()) for _ in range(n)]
coins.sort()
# 1차원 DP
dp = [0] * (k + 1)
# 0을 만드는 경우의 수는 1개
dp[0] = 1
# 돈 종류별로 순회
for coin in coins:
for i in range(coin, k + 1):
# 점화식
dp[i] += dp[i - coin]
print(dp[k])
점화식 떠올리는 게 너무 어렵습니다!
오늘 정말 한 것도 없는데 벌써 너무 졸립니다.
지금 자고 내일 일찍 일어나야겠습니다.
안녕히 주무십쇼!
LIST
'Algorithm' 카테고리의 다른 글
프로그래머스 Lv.2: 3월에 태어난 여성 회원 목록 출력하기 - MySQL 풀이 (0) | 2025.02.28 |
---|---|
백준 11053번: 가장 긴 증가하는 부분 수열 (S2) - Python 풀이 (0) | 2025.02.26 |
백준 1495번: 기타리스트 (S1) - Python 풀이 (1) | 2025.02.22 |
백준 1904번: 01타일 (S3) - Python 풀이 (0) | 2025.02.22 |
백준 1939번: 중량제한 (G3) - Python 풀이 (0) | 2025.02.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 투포인터
- 백준
- 백트래킹
- 스택
- MySQL
- 힙
- 알고리즘
- BFS
- 큐
- Baekjoon
- Swift
- 코테준비
- Swift로백준풀기
- 자료구조
- 코딩테스트
- swea
- 이분탐색
- dp
- 프로그래머스
- Python
- ios
- 코테
- 우선순위큐
- Deque
- Programmers
- 구현
- 그리디
- 정렬
- SQL
- 다이나믹프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함