250x250
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 | 31 |
Tags
- objecterror
- 코딩테스트
- 인터페이스
- DI
- 티스토리챌린지
- fielderror
- 테스트코드
- 코드트리
- 김영한
- 싱글톤
- 스프링컨테이너
- 서블릿
- 다형성
- 코드트리조별과제
- 오버라이딩
- html form
- HttpServletResponse
- JSON
- java
- @configuration
- 추상클래스
- 참조변수
- equals()
- 오블완
- http 메시지 컨버터
- 의존관계
- ocp
- 프록시
- 스프링
- 백준
Archives
- Today
- Total
minOS
[코드트리 조별과제] 최대 동전 거슬러주기 본문
728x90
https://www.codetree.ai/missions/2/problems/max-coin-change
문제는 사이트 들어가시면 볼 수 있습니다.
최대 동전 거슬러주기는 DP 문제로, 상태를 정의하는 것이 중요합니다. dp[i]를 이제까지 선택한 동전의 합이 i일 때 가능한 최대 동전의 개수라고 정의해보면, dp[i]에 이르기 위해 그 전 상황을 가정한 것을 그림으로 표현할 수 있습니다.
이렇게 표현할 수 있습니다. 그렇다면 dp[i]는 가능한 최대 동전의 개수이므로 dp[i] = max(dp[i], dp[i - coin[j]] + 1)이라는 점화식을 세울 수 있습니다. 여기서 j는 코인 리스트를 순회합니다. 최대 동전의 수를 구해야 하므로 dp 배열의 초기값은 매우 작은 값인 -sys.maxsize로 초기화했습니다. 그리고 0원은 초기값이 없으므로 dp[0] = 0입니다.
import sys n,m = map(int,input().split()) coin = list(map(int,input().split())) INT_MIN = - sys.maxsize dp = [ INT_MIN for _ in range(m+1)] dp[0] =0 for i in range(1,m+1): for j in range(n): if i >= coin[j] and dp[i-coin[j]] == INT_MIN: continue if i >= coin[j]: dp[i] = max(dp[i],dp[i-coin[j]]+1) print(dp[m] if dp[m] != INT_MIN else -1)
돈을 거슬러 줄 수 없을 때는 -1을 출력하고, 그렇지 않으면 m원을 거슬러주는 동전의 최대 개수를 출력합니다.
728x90
'Problem Solving > 코드트리' 카테고리의 다른 글
[코드트리 조별과제] n개의 점 중 m개 고르기 (0) | 2024.08.24 |
---|---|
[코드트리 조별과제] 흰검 칠하기 (0) | 2024.08.09 |