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 |
Tags
- baekjoon
- 내일배움캠프
- UXUI기초정복
- 백엔드 부트캠프
- 오픈챌린지
- Spring
- 디자인교육
- 오블완
- 백엔드
- mysql
- 국비지원교육
- Be
- 객체지향
- 내일배움카드
- 디자인챌린지
- OPENPATH
- 국비지원취업
- 디자인강의
- UXUIPrimary
- 패스트캠퍼스
- 백준
- KDT
- 티스토리챌린지
- 환급챌린지
- 국비지원
- Java
- UXUI챌린지
- 부트캠프
- 오픈패스
- 백엔드개발자
Archives
- Today
- Total
군만두의 IT 공부 일지
[백준] 2293번: 동전 1 (파이썬) 본문
✅문제: 2293번
📌문제풀이
주어진 동전들로 특정 금액을 만드는 경우의 수를 구하는 문제임. 각 동전은 무한히 사용할 수 있으며, 동전의 종류와 목표 금액이 주어짐.
- DP 테이블 초기화
- dp[x]: 금액 x를 만드는 경우의 수를 저장하는 배열
- dp[0] = 1: 금액 0을 만드는 방법은 아무 동전도 사용하지 않는 1가지 경우뿐임.
- 동전 업데이트
- 각 동전에 대해 해당 동전을 포함하여 만들 수 있는 금액을 계산함.
- 현재 금액 x에서 dp[x] += dp[x−coin] 으로 이전 값에 추가함.
- 즉, 동전 coin을 사용해 금액 x를 만드는 경우의 수를 누적함.
- 결과 출력
- DP 테이블에서 dp[k] 값을 출력하여 금액 k를 만드는 경우의 수를 반환함.
import sys
input = sys.stdin.read
def solution(coins, k):
dp = [0] * (k + 1)
dp[0] = 1
for coin in coins:
for amount in range(coin, k + 1):
dp[amount] += dp[amount - coin]
return dp[k]
data = input().split()
n = int(data[0])
k = int(data[1])
coins = list(map(int, data[2:]))
result = solution(coins, k)
print(result)
위 코드를 예제 입출력 과정을 이해하려면 아래와 같이 확인할 수 있음.
# 예제 입력 1
3 10
1
2
5
- DP 테이블 초기화
- 초기 상태: dp = [1,0,0,0,0,0,0,0,0,0,0]
- 1원 동전 업데이트
- 금액별 경우의 수 계산: dp[x] += dp[x−1]
- 결과: dp = [1,1,1,1,1,1,1,1,1,1,1]
- 2원 동전 업데이트
- dp[x] += dp[x−2]
- 결과: dp = [1,1,2,2,3,3,4,4,5,5,6]
- 5원 동전 업데이트
- dp[x] += dp[x−5]
- 결과: dp = [1,1,2,2,3,4,5,6,7,8,10]
- 결과 출력
- dp[10] = 10
# 예제 출력 1
10
📌후기
- 동적 계획법(DP)을 활용해 문제를 푸는 문제인데, DP에 대해서 공부하고 나서 풀면 골드 4치고는 풀만한 것 같음.
- 중복 계산을 피하면서 모든 동전 조합을 고려하는 방법에 대해서 알 수 있었음.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 17952번: 과제는 끝나지 않아! (파이썬) (0) | 2024.11.24 |
---|---|
[백준] 1260번: DFS와 BFS (0) | 2024.11.20 |
[백준] 1181번: 단어 정렬 (파이썬) (1) | 2024.11.18 |
[백준] 1263번: 시간 관리 (파이썬) (0) | 2024.11.17 |
[백준] 1269번: 대칭 차집합 (파이썬) (0) | 2024.11.15 |
Comments