forked from ZoranPandovski/al-go-rithms
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMinimumCoins.java
53 lines (46 loc) · 2.15 KB
/
MinimumCoins.java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class MinimumCoins {
private static List<Integer> minimumCoins(Integer value, List<Integer> denominations) {
List<Integer> result = new ArrayList<>();
// Assuming list of denominations is sorted in descending order
for(Integer curDenom : denominations) {
while (curDenom <= value){
result.add(curDenom);
value -= curDenom;
}
}
return result;
}
public static void main(String[] args) {
List<TestScenario> scenarios = Arrays.asList(
new TestScenario(100, Arrays.asList(50, 25, 10, 5, 1), Arrays.asList(50, 50)),
new TestScenario(101, Arrays.asList(50, 25, 10, 5, 1), Arrays.asList(50, 50, 1)),
new TestScenario(77, Arrays.asList(50, 25, 10, 5, 1), Arrays.asList(50, 25, 1, 1)),
new TestScenario(38, Arrays.asList(50, 25, 10, 5, 1), Arrays.asList(25, 10, 1, 1, 1)),
new TestScenario(17, Arrays.asList(50, 25, 10, 5, 1), Arrays.asList(10, 5, 1, 1)),
new TestScenario(3, Arrays.asList(50, 25, 10, 5, 1), Arrays.asList(1, 1, 1)),
new TestScenario(191, Arrays.asList(100, 50, 25, 10, 5, 1), Arrays.asList(100, 50, 25, 10, 5, 1))
);
for (TestScenario scenario : scenarios) {
List<Integer> actual = minimumCoins(scenario.value, scenario.denoms);
if (!actual.equals(scenario.result)) {
System.out.println("Test Failed: Value: " + scenario.value
+ ", Denominations: " + scenario.denoms
+ ", Expected Result: " + scenario.result
+ ", Actual Result: " + actual);
}
}
}
private static class TestScenario {
public int value;
public List<Integer> denoms;
public List<Integer> result;
public TestScenario(int value, List<Integer> denoms, List<Integer> result) {
this.value = value;
this.denoms = denoms;
this.result = result;
}
}
}