https://www.acmicpc.net/problem/11047
동전갯수의 최솟값을 찾아야한다.
1. 금액이 큰 동전부터 선택한다.
2. 1번의 동전을 최대한 많이 선택한다.
3. 입력받은 금액만큼 동전을 선택했는지 확인한다. 그렇지 않다면 1번부터 다시 수행한다.
package algorithm.greedy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 동전0
*/
public class Q11047 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputArr[] = br.readLine().split(" ");
int N = Integer.parseInt(inputArr[0]);
int K = Integer.parseInt(inputArr[1]);
int coinArr[] = new int[N];
int nCoinCnt = 0;
for(int nIdx = 0 ; nIdx < N ; nIdx++) {
coinArr[nIdx] = Integer.parseInt(br.readLine());
}
while(true) {
/*1.선택절차*/
//현재상태에서 최적의 해를 찾는다
for(int nIdx = coinArr.length - 1 ; nIdx >= 0 ; nIdx--) {
/*2.적절성 검사*/
//선택된 해가 문제의 조건을 만족하는지 검사한다.
int nReturnCoin = K / coinArr[nIdx];
if(nReturnCoin > 0) {
K -= nReturnCoin * coinArr[nIdx];
nCoinCnt += nReturnCoin;
break;
}
}
/*3.해답 검사*/
//문제가 해결되었는지 검사한다.
if(K == 0) {
System.out.println(nCoinCnt);
break;
}
}
}
}
백준 1715 [카드 정렬하기] - JAVA (0) | 2022.02.25 |
---|---|
백준 2839 [설탕 배달] - JAVA (0) | 2022.02.15 |
백준 12100 [2048 (Easy)] - JAVA (0) | 2022.01.13 |
백준 16234 [인구 이동] - JAVA (0) | 2022.01.10 |
백준 16236 [아기 상어] - JAVA (0) | 2022.01.09 |
댓글 영역