import java.util.Arrays;
public class GreedyChange
{
public int smallest(int[] denoms) {
Arrays.sort(denoms);
int max = denoms[denoms.length-1]*2;
int[] mins = new int[max+1];
for (int i=1; i<=max; i++)
mins[i] = 9999999;
for (int i=1; i <= max; i++)
for (int j=0; j < denoms.length; j++)
if(denoms[j] <= i)
mins[i] = Math.min(mins[i], 1 + mins[i-denoms[j]]);
int index=0;
for (int i=1; i <= max; i++) {
while (1+index < denoms.length && denoms[1+index]<=i)
index++;
if (mins[i] != 1+mins[i-denoms[index]])
return i;
}
return -1;
}
}
Explanation
최소값 알고리즘
mins[i] = Math.min(mins[i], 1 + mins[i-denoms[j]]);
탐욕 알고리즘 (Greedy Algorithm)
while (1+index < denoms.length && denoms[1+index]<=i) index++;
References
최근 덧글