Python_알고리즘/Gold V
2293. [Python]동전 1
최근영
2024. 9. 5. 05:43
1. 문제
2. 접근 방법
- 시간 제한: 0.5초
- 메모리 제한: 4MB
- DP
3. 파이썬 코드
import sys
input = sys.stdin.readline
n, k = map(int,input().split())
# 동전 저장 리스트
coins = []
# 동전 저장
for _ in range(n):
coins.append(int(input()))
# 동전 정렬
coins.sort()
dp = [0] * (k+1)
# 0원을 만드는 방법도 1개
dp[0] = 1
# 동전 반복 진행
for coin in coins:
# 초기값 동전부터 1씩 더해나감
for i in range(coin,k+1):
# i번째 동전의 경우 i-coin 한 값을 더해나가야함 동전이 계속 값이 바뀌기 때문에
dp[i] += dp[i-coin]
print(dp[-1])
4. 문제를 풀고난 후 생각
- 내가 생각하기엔 DP의 기본적인 문제였고, 실제 동전을 인풋을 받은 후 초기 dp 값을 k+1 까지 설정해준 후 dp[0] 을 1로 초기 세팅을 진행했다.
- 0 원을 만드는 방법은 0원을 넣는 것이기 때문에 초기 값을 1로 설정해줬다.
- 동전이 들어오는 크기가 순서가 없기 때문에 작은 동전부터 오름차순으로 sort 처리를 해줬다.
- 이후 동전 한개씩 반복문을 진행하며 동전 인덱스 - 현재 동전 을 빼준 dp 값을 계속해서 갱신해줬다.
5. 문제를 푸는데 도움이 되는 지식
- DP(다이나믹 프로그래밍)