From 348c451121ab17bd7d807e2f707e9a43fdbf14e9 Mon Sep 17 00:00:00 2001 From: izayaki22 Date: Thu, 9 Mar 2023 19:31:39 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=EB=B3=B4=EB=84=88=EC=8A=A4=20?= =?UTF-8?q?=EB=B3=BC=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20-=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=EA=B0=80=20=EC=9E=85=EB=A0=A5=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=95=8C=EB=AC=B8=EC=97=90=20Input=20class?= =?UTF-8?q?=EC=97=90=20getBonusNumber=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/poolc/javapractice/lotto/Input.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/poolc/javapractice/lotto/Input.java b/src/main/java/com/poolc/javapractice/lotto/Input.java index 47524ad..30ad441 100644 --- a/src/main/java/com/poolc/javapractice/lotto/Input.java +++ b/src/main/java/com/poolc/javapractice/lotto/Input.java @@ -22,5 +22,11 @@ public ArrayList getWinNumbers() { String win = sc.nextLine(); return Step1.winNumbers(win); } + + public int getBonusNumber(){ + System.out.println("보너스 볼을 입력해 주세요."); + int bonusNumber = sc.nextInt(); + return bonusNumber; + } } From 6364a5ce4773eee99e24b579a232c22e642b16a7 Mon Sep 17 00:00:00 2001 From: izayaki22 Date: Sat, 11 Mar 2023 17:20:35 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=202=EB=93=B1=EC=97=90=20=EB=8B=B9?= =?UTF-8?q?=EC=B2=A8=EB=90=9C=20=EB=A1=9C=EB=98=90=20=EA=B0=9C=EC=88=98?= =?UTF-8?q?=EB=A5=BC=20=EB=B0=98=ED=99=98=ED=95=98=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80=20-=20=EB=8B=B9?= =?UTF-8?q?=EC=B2=A8=EB=B2=88=ED=98=B8=EA=B0=80=205=EA=B0=9C=EC=9D=B8=20?= =?UTF-8?q?=EB=A1=9C=EB=98=90=EB=93=A4=EC=9D=84=20=EC=B0=BE=EC=95=84=20?= =?UTF-8?q?=EB=B3=B4=EB=84=88=EC=8A=A4=20=EB=B3=BC=EC=9D=B4=20=ED=8F=AC?= =?UTF-8?q?=ED=95=A8=EB=90=98=EC=96=B4=20=EC=9E=88=EB=8A=94=EC=A7=80=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8=ED=95=9C=20=ED=9B=84,=202=EB=93=B1=20?= =?UTF-8?q?=EB=8B=B9=EC=B2=A8=20=EA=B0=9C=EC=88=98=EB=A5=BC=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=20-=20bonusMatch=EA=B0=80=20MATCH,=20NOTMATCH?= =?UTF-8?q?=EC=9D=B8=EC=A7=80=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EC=8B=A4?= =?UTF-8?q?=ED=96=89=EB=90=98=EB=8A=94=20run=20=ED=95=A8=EC=88=98=EA=B0=80?= =?UTF-8?q?=20=EB=8B=A4=EB=A6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/poolc/javapractice/lotto/Step1.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/poolc/javapractice/lotto/Step1.java b/src/main/java/com/poolc/javapractice/lotto/Step1.java index 1b14fff..32b591a 100644 --- a/src/main/java/com/poolc/javapractice/lotto/Step1.java +++ b/src/main/java/com/poolc/javapractice/lotto/Step1.java @@ -17,7 +17,7 @@ public static void main(String[] args) { Output output = new Output(); output.printLottoCount(lottoCount); - output.printWinStatistics(lottoResults); + output.printWinStatistics(lottoResults, 0); output.printEarningRate(earningRate(lottoResults, buyAmount)); } From 317c8494f54ba9b6ce982611875965d71a4fbf58 Mon Sep 17 00:00:00 2001 From: izayaki22 Date: Sat, 11 Mar 2023 17:21:28 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=EB=B3=B4=EB=84=88=EC=8A=A4=20?= =?UTF-8?q?=EB=B3=BC=EC=9D=84=20=EC=9E=85=EB=A0=A5=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80=20-=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=EA=B0=80=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=B3=B4=EB=84=88=EC=8A=A4=20=EB=B3=BC?= =?UTF-8?q?=EC=9D=84=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EC=95=84=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/poolc/javapractice/lotto/Input.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/poolc/javapractice/lotto/Input.java b/src/main/java/com/poolc/javapractice/lotto/Input.java index 30ad441..44f5c54 100644 --- a/src/main/java/com/poolc/javapractice/lotto/Input.java +++ b/src/main/java/com/poolc/javapractice/lotto/Input.java @@ -20,12 +20,14 @@ public int getBuyAmount() { public ArrayList getWinNumbers() { System.out.println("지난 주 당첨 번호를 입력해 주세요."); String win = sc.nextLine(); - return Step1.winNumbers(win); + return Lotto.winNumbers(win); } public int getBonusNumber(){ System.out.println("보너스 볼을 입력해 주세요."); int bonusNumber = sc.nextInt(); + sc.nextLine(); + System.out.println(); return bonusNumber; } } From 771d4574ea505d16d51b538c16f2671dfcda09d4 Mon Sep 17 00:00:00 2001 From: izayaki22 Date: Sat, 11 Mar 2023 17:23:10 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=ED=86=B5?= =?UTF-8?q?=EA=B3=84=EC=97=90=202=EB=93=B1=20=EB=8B=B9=EC=B2=A8=20?= =?UTF-8?q?=EA=B0=9C=EC=88=98=20=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20-=20printWinStatistic?= =?UTF-8?q?s=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=9D=98=20=EC=9D=B8=EC=88=98?= =?UTF-8?q?=EC=97=90=20count2ndLotto=EB=A5=BC=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=B4=202=EB=93=B1=EC=97=90=20=EB=8B=B9=EC=B2=A8=EB=90=9C?= =?UTF-8?q?=20=EA=B0=9C=EC=88=98=EB=8F=84=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/poolc/javapractice/lotto/Output.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/poolc/javapractice/lotto/Output.java b/src/main/java/com/poolc/javapractice/lotto/Output.java index e38eb52..8fcff78 100644 --- a/src/main/java/com/poolc/javapractice/lotto/Output.java +++ b/src/main/java/com/poolc/javapractice/lotto/Output.java @@ -7,17 +7,18 @@ public void printLottoCount(int lottoCount) { System.out.println(lottoCount + "개를 구매했습니다."); } - public void printWinStatistics(ArrayList resultList) { + public void printWinStatistics(ArrayList lottoResults, int count2ndLotto) { System.out.println("당첨 통계"); System.out.println("---------"); - System.out.println("3개 일치 (5000원) - " + resultList.get(0) + "개"); - System.out.println("4개 일치 (50000원) - " + resultList.get(1) + "개"); - System.out.println("5개 일치 (1500000원) - " + resultList.get(2) + "개"); - System.out.println("6개 일치 (2000000000원) - " + resultList.get(3) + "개"); + System.out.println("3개 일치 (5000원) - " + lottoResults.get(0) + "개"); + System.out.println("4개 일치 (50000원) - " + lottoResults.get(1) + "개"); + System.out.println("5개 일치 (1500000원) - " + lottoResults.get(2) + "개"); + System.out.println("5개 일치, 보너스 볼 일치(30000000원) - " + count2ndLotto +"개"); + System.out.println("6개 일치 (2000000000원) - " + lottoResults.get(3) + "개"); } public void printEarningRate(double earningRate) { - System.out.printf("총 수익률은 %f%%입니다.", earningRate); + System.out.printf("총 수익률은 %.2f%%입니다.", earningRate); } } From d46daab02f989dbe31d86ffd358cfe6d39d99e4a Mon Sep 17 00:00:00 2001 From: izayaki22 Date: Sat, 11 Mar 2023 17:37:06 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=ED=86=B5?= =?UTF-8?q?=EA=B3=84=EC=97=90=202=EB=93=B1=20=EB=8B=B9=EC=B2=A8=20?= =?UTF-8?q?=EA=B0=9C=EC=88=98=20=EC=B6=9C=EB=A0=A5=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20-=20printWinStatistic?= =?UTF-8?q?s=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=9D=98=20=EC=9D=B8=EC=88=98?= =?UTF-8?q?=EC=97=90=20count2ndLotto=EB=A5=BC=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=B4=202=EB=93=B1=EC=97=90=20=EB=8B=B9=EC=B2=A8=EB=90=9C?= =?UTF-8?q?=20=EA=B0=9C=EC=88=98=EB=8F=84=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lotto/{Step1.java => Lotto.java} | 75 ++++++++++++++++--- .../lotto/{Step1Test.java => LottoTest.java} | 16 ++-- 2 files changed, 71 insertions(+), 20 deletions(-) rename src/main/java/com/poolc/javapractice/lotto/{Step1.java => Lotto.java} (55%) rename src/test/java/com/poolc/javapractice/lotto/{Step1Test.java => LottoTest.java} (86%) diff --git a/src/main/java/com/poolc/javapractice/lotto/Step1.java b/src/main/java/com/poolc/javapractice/lotto/Lotto.java similarity index 55% rename from src/main/java/com/poolc/javapractice/lotto/Step1.java rename to src/main/java/com/poolc/javapractice/lotto/Lotto.java index 32b591a..c861f63 100644 --- a/src/main/java/com/poolc/javapractice/lotto/Step1.java +++ b/src/main/java/com/poolc/javapractice/lotto/Lotto.java @@ -4,23 +4,26 @@ import java.text.DecimalFormat; import java.util.*; -public class Step1 { +public class Lotto { public static void main(String[] args) { Input input = new Input(); + Output output = new Output(); int buyAmount = input.getBuyAmount(); int lottoCount = buyAmount / 1000; + output.printLottoCount(lottoCount); ArrayList> lotto = makeLotto(lottoCount); ArrayList winList = input.getWinNumbers(); - ArrayList lottoResults = result(countResults(winList, lotto, lottoCount)); + int bonusNumber = input.getBonusNumber(); + ArrayList countedList = countResults(winList, lotto, lottoCount); + ArrayList lottoResults = result(countedList); - Output output = new Output(); - output.printLottoCount(lottoCount); - output.printWinStatistics(lottoResults, 0); - output.printEarningRate(earningRate(lottoResults, buyAmount)); - } + int count2ndLotto = find2ndLotto(lotto, countedList, lottoResults, bonusNumber); + output.printWinStatistics(lottoResults, count2ndLotto); + output.printEarningRate(earningRate(lottoResults, buyAmount, count2ndLotto)); + } public static ArrayList> makeLotto(int lottoCount) { ArrayList> lotto = new ArrayList<>(lottoCount); @@ -37,6 +40,7 @@ public static ArrayList> makeLotto(int lottoCount) { System.out.println(lotto.get(i).toString()); } + System.out.println(); return lotto; } @@ -52,6 +56,20 @@ public static ArrayList winNumbers(String winNumbers) { return winArrayList; } + public static int find2ndLotto(ArrayList> lotto, ArrayList countedList, ArrayList lottoResults, int bonusNumber) { + int indexFiveMatchedLotto = countedList.indexOf(5); + int count2ndLotto = 0; + + while(indexFiveMatchedLotto != -1){ + BonusMatch bonusMatch = BonusMatch.isMatched(lotto.get(indexFiveMatchedLotto), bonusNumber); + count2ndLotto += bonusMatch.run(lottoResults); + ArrayList tempList = new ArrayList<>(countedList.subList(indexFiveMatchedLotto + 1, countedList.size())); + indexFiveMatchedLotto = tempList.indexOf(5); + } + + return count2ndLotto; + } + public static ArrayList countResults(ArrayList winList, ArrayList> lotto, int lottoCount) { ArrayList countedList = new ArrayList<>(lottoCount); @@ -65,8 +83,8 @@ public static ArrayList countResults(ArrayList winList, ArrayL public static int countMatchedNumbers(ArrayList winList, ArrayList lotto) { return (int) lotto.stream() - .filter(winList::contains) - .count(); + .filter(winList::contains) + .count(); } public static ArrayList result(ArrayList countedList){ @@ -79,12 +97,47 @@ public static ArrayList result(ArrayList countedList){ return lottoResults; } - public static double earningRate(ArrayList lottoResults, int buyAmount) { + public static double earningRate(ArrayList lottoResults, int buyAmount, int count2ndLotto) { double totalMoney = 5000 * lottoResults.get(0) + 50000 * lottoResults.get(1) - + 1500000 * lottoResults.get(2) + 2000000000 * lottoResults.get(3); + + 1500000 * lottoResults.get(2) + 30000000 * count2ndLotto+ 2000000000 * lottoResults.get(3); DecimalFormat df = new DecimalFormat("#.##"); df.setRoundingMode(RoundingMode.DOWN); return Double.parseDouble(df.format(((totalMoney - buyAmount) / buyAmount * 100))); } + + enum BonusMatch { + NOTMATCH(false){ + @Override + int run(ArrayList lottoResults) { + return 0; + } + }, + MATCH(true){ + @Override + int run(ArrayList lottoResults) { + lottoResults.set(2, lottoResults.get(2) - 1); + return 1; + } + }; + + private boolean matchedBonus; + + BonusMatch(boolean matchedBonus){ + this.matchedBonus = matchedBonus; + } + + public static BonusMatch isMatched(ArrayList lotto, int bonusNumber) { + if(lotto.contains(bonusNumber)){ + return BonusMatch.MATCH; + } + return BonusMatch.NOTMATCH; + } + + abstract int run(ArrayList countedList); + + + + } + } diff --git a/src/test/java/com/poolc/javapractice/lotto/Step1Test.java b/src/test/java/com/poolc/javapractice/lotto/LottoTest.java similarity index 86% rename from src/test/java/com/poolc/javapractice/lotto/Step1Test.java rename to src/test/java/com/poolc/javapractice/lotto/LottoTest.java index 42e7218..d5c781a 100644 --- a/src/test/java/com/poolc/javapractice/lotto/Step1Test.java +++ b/src/test/java/com/poolc/javapractice/lotto/LottoTest.java @@ -3,17 +3,15 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.lang.reflect.Array; import java.util.*; -import java.text.DecimalFormat; import static org.junit.jupiter.api.Assertions.assertArrayEquals; -public class Step1Test { +public class LottoTest { @Test public void makeLottoTest(){ - Step1 step1 = new Step1(); + Lotto step1 = new Lotto(); ArrayList> lotto = step1.makeLotto(100); for (int i = 0; i < 10; i++){ for (int j = 0; j < lotto.get(i).size(); j++){ @@ -24,7 +22,7 @@ public void makeLottoTest(){ @Test public void winNumbersTest(){ - Step1 step1 = new Step1(); + Lotto step1 = new Lotto(); ArrayList actualList = step1.winNumbers("1, 2,3, 4, 5,6"); ArrayList expectedList = new ArrayList<>(); for (int i = 1; i < 7; i++){ @@ -35,7 +33,7 @@ public void winNumbersTest(){ @Test public void countResultsTest(){ - Step1 step1 = new Step1(); + Lotto step1 = new Lotto(); ArrayList winListTest = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6)); ArrayList> lottoTest = new ArrayList<>(2); lottoTest.add(new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7, 8))); @@ -50,7 +48,7 @@ public void countResultsTest(){ @Test public void resultTest(){ - Step1 step1 = new Step1(); + Lotto step1 = new Lotto(); ArrayList lottoResultsTest = new ArrayList<>(Arrays.asList(1, 2, 3, 3, 3, 4, 4)); ArrayList actual = step1.result(lottoResultsTest); @@ -65,10 +63,10 @@ public void resultTest(){ @Test public void earningRateTest(){ - Step1 step1 = new Step1(); + Lotto step1 = new Lotto(); ArrayList lottoResultsTest = new ArrayList<>(); lottoResultsTest.add(3); - double actual = step1.earningRate(lottoResultsTest,14000); + double actual = step1.earningRate(lottoResultsTest, 2,14000); double expected = -64.28;