티스토리 뷰
동전교환은 다이나믹 프로그래밍으로 해결한다.
잔돈이 n 이고, c가 코인일때
f(n) = f(n - c) + 1
가 된다.
현재 잔돈에서 코인을 뺀돈의 코인개수가 있다면 거기에 +1을 하게 되면 현재의 코인개수가 된다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package sdk.algo.dynamic; | |
import java.util.Scanner; | |
/** | |
* 2000, 다이나믹 | |
* 동전교환 | |
* | |
* @author whitebeard | |
* | |
*/ | |
public class Problem2000 { | |
public static void main(String[] args) { | |
Scanner in = new Scanner(System.in); | |
int N = in.nextInt(); // 동전의 단계수 | |
int[] coins = new int[N]; // 동전 | |
for (int i = 0; i < N; i++) { | |
coins[i] = in.nextInt(); | |
} | |
int W = in.nextInt(); // 잔돈 | |
in.close(); | |
int[] values = new int[W + 1]; | |
for (int currentValue = 1; currentValue < values.length; currentValue++) { | |
int MIN = Integer.MAX_VALUE; | |
for (int k = 0; k < N; k++) { | |
// 동전의 값과 일치하면 1로 설정 | |
if (currentValue == coins[k]) { | |
MIN = 1; | |
break; | |
} else if (currentValue > coins[k] && currentValue - coins[k] > 0) { | |
// 현재의 동전의 뺀값에 동전이 존재하면 현재보다 작은지 확인하여 최소값이면 MIN으로 설정 | |
if (values[currentValue - coins[k]] != 0) | |
MIN = (values[currentValue - coins[k]] + 1 < MIN) ? values[currentValue - coins[k]] + 1 : MIN ; | |
} | |
} | |
// 최소값을 설정 | |
values[currentValue] = MIN == Integer.MAX_VALUE ? 0 : MIN; | |
} | |
// for(int n : values) | |
// System.out.printf("%d ", n ); | |
System.out.println(values[W] == 0 ? "impossible" : values[W]); | |
} | |
} |
반응형
'알고리즘 > 정올' 카테고리의 다른 글
[정올][백트래킹] 1027 좋은 수열 (0) | 2016.10.09 |
---|---|
[정올][그리디] 2499 저울 (0) | 2016.10.07 |
[정올] [문제은행] 1942 하얀모자 (0) | 2016.09.23 |
[정올][다이나믹] 1871 줄세우기 (0) | 2016.09.21 |
[정올][다이나믹] 1539 가장높은 탑 쌓기 (0) | 2016.09.20 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 오류
- mysql
- SQL
- 하이브
- Python
- Linux
- java
- HIVE
- ubuntu
- 정올
- 백준
- S3
- bash
- 다이나믹
- 하둡
- build
- yarn
- Hadoop
- airflow
- Tez
- SPARK
- error
- 알고리즘
- hbase
- oozie
- emr
- HDFS
- 파이썬
- nodejs
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함