Notice
Recent Posts
Recent Comments
Tags
- 프로그래머스 레벨1
- 프로그래머스 level1
- 알고리즘 공부
- 프로그래머스 전화번호 목록 파이썬
- 프로그래머스 알고리즘 고득점 kit
- 전화번호 목록 python
- 바닥장식 파이썬
- 백준
- 백준 다이나믹프로그래밍
- Django 기초
- 스프링 초보
- 스프링 기초
- 프로그래머스 고득점 kit
- 장고
- 코딩테스트
- 알고리즘 문제
- spring 기초
- 코딩테스트 연습
- 프로그래머스
- 장고 기초
- Django
- dp 알고리즘
- 백준 dp
- 프로그래머스 전화번호 목록 python
- 코테
- 백준 바닥장식 python
- 코테 연습
- Spring 초보
- programmers
- 프로그래머스 레벨2
Archives
- Today
- Total
일일구름 IT
[백준 2294] 동전2 (Python) 본문
코드
n, k = map(int, input().split())
coin = []
for i in range(n):
coin.append(int(input()))
sum = [10001 for i in range(k+1)]
sum[0] = 0
for i in coin:
for j in range(i, k+1):
sum[j] = min(sum[j], sum[j-i]+1)
if sum[k] == 10001:
print(-1)
else:
print(sum[k])
동전 1과 비슷한 문제이지만 차이점은 동전의 최소 갯수를 구하는 점과 불가능한 경우엔 -1을 출력하는 것이다.
- 일단 sum 리스트를 초기값 10001로 초기화 해준다.
- i==j일 경우에는 동전을 1개만 뽑아도 되므로 sum[0]에 0을 넣어 sum[i-j]+1을 sum[j]에 넣을 수 있도록 한다.
- 동전의 최소 갯수를 구하는 것이기 때문에 j값을 위한 동전의 갯수는 min(sum[j], sum[j-i] + 1)으로 하여 전의 동전의 갯수와 i값의 동전이 있는 경우의 동전의 갯수중 더 작은 갯수를 넣는다.
이것도 어려웠다... 동전1과 유사한 문제임에도 로직을 생각해내는게 왜이렇게 어려운지..!
https://www.acmicpc.net/problem/2294
'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글
[백준 2293] 코인1 (Python) (0) | 2023.05.08 |
---|---|
[백준 1932] 정수 삼각형 (Python) (0) | 2023.03.23 |
[백준 1912] 연속합 (Python) (0) | 2023.03.23 |