diff --git a/src/MakeChange154/Change.java b/src/MakeChange154/Change.java new file mode 100644 index 0000000..785e544 --- /dev/null +++ b/src/MakeChange154/Change.java @@ -0,0 +1,28 @@ +package MakeChange154; + +import java.util.*; + +public class Change { + + private Vector units; + + public Change(Vector units) { + this.units = units; + } + + public Vector makeChange(Integer money) { + Vector result = new Vector(); + + Integer remainMoney = money; + + for (Integer unit : units) { + for (int num = 1; num <= remainMoney / unit; num++) { + result.add(unit); + } + remainMoney -= remainMoney / unit * unit; + if (remainMoney <= 0) break; + } + + return result; + } +} diff --git a/test/MakeChange154Test/ChangeTest.java b/test/MakeChange154Test/ChangeTest.java new file mode 100644 index 0000000..c07b7c0 --- /dev/null +++ b/test/MakeChange154Test/ChangeTest.java @@ -0,0 +1,63 @@ +package MakeChange154Test; + +import MakeChange154.*; +import org.testng.annotations.*; + +import java.util.*; + +import static junit.framework.Assert.*; + +public class ChangeTest { + + private Change change; + + @BeforeClass + private void setup_change() { + Vector moneyUnits = new Vector(); + moneyUnits.add(25); + moneyUnits.add(10); + moneyUnits.add(5); + moneyUnits.add(1); + + change = new Change(moneyUnits); + } + + @Test + public void should_return_1_for_change_1() { + Vector expectedChanges = new Vector(); + expectedChanges.add(1); + + assertVectorIntegerEquals(expectedChanges, change.makeChange(1)); + } + + @Test + public void should_return_5_1_for_change_6() { + Vector expectedChanges = new Vector(); + expectedChanges.add(5); + expectedChanges.add(1); + + assertVectorIntegerEquals(expectedChanges, change.makeChange(6)); + } + + @Test + public void should_return_25_10_10_1_1_1_1_for_change_49() { + Vector expectedChanges = new Vector(); + expectedChanges.add(25); + expectedChanges.add(10); + expectedChanges.add(10); + expectedChanges.add(1); + expectedChanges.add(1); + expectedChanges.add(1); + expectedChanges.add(1); + + assertVectorIntegerEquals(expectedChanges, change.makeChange(49)); + } + + private void assertVectorIntegerEquals(Vector expected, Vector actual) { + assertEquals("length not equal", expected.size(), actual.size()); + + for (int i = 0; i < expected.size(); i++) { + assertEquals(i + "th value not equal", expected.get(i), actual.get(i)); + } + } +}