diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index d190922..c8b1f3e 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,7 +1,28 @@ package lotto; +import java.util.ArrayList; +import java.util.List; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + + int count = Output.userBuyOut(); + + ArrayList> numberU = new ArrayList<>(); + numberU = lotto.Lotto.LottoNumber(count); + + Output.usernumber(numberU, count); + + List luckyNumber = new ArrayList<>(); + luckyNumber = Output.luckyNumberOut(); + + int plusNumber = Output.plusNumberOut(luckyNumber); + + int[] win = lotto.Lotto.LottoWinning(numberU, luckyNumber, plusNumber, count); + Output.luckyResult(win, lotto.Lotto.LottoReturnRate(win, count)); + + } } + + diff --git a/src/main/java/lotto/Input.java b/src/main/java/lotto/Input.java new file mode 100644 index 0000000..3add272 --- /dev/null +++ b/src/main/java/lotto/Input.java @@ -0,0 +1,61 @@ +package lotto; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + + + +public class Input { + + public static int userBuyIn() { + Scanner sc1 = new Scanner(System.in); + int money = sc1.nextInt(); + + if(money % 1000 != 0) { + UserHelp.errorUserBuy(); + } + + return money / 1000; + } + + public static List luckyNumberIn() { + + Scanner sc = new Scanner(System.in); + String str = sc.next(); + + String[] strArr = str.split(","); + List intList = new ArrayList<>(Arrays.asList(strArr)); + + List luckyNumber = new ArrayList<>(); + for (String s : intList) { + luckyNumber.add(Integer.parseInt(s)); + } + + if(luckyNumber.size() != 6) { + UserHelp.errorLuckyNumber_size(); + } + for (int i = 0; i < 6; ++i) { + if(luckyNumber.get(i) > 45 || luckyNumber.get(i) < 0) { + UserHelp.errorLuckyNumber_number(); + } + } + + return luckyNumber; + + } + + public static int plusNumberIn(List luckyNumber) { + Scanner sc = new Scanner(System.in); + int plusNumber = sc.nextInt(); + boolean plus = luckyNumber.contains(plusNumber); + if(plus) { + UserHelp.errorPlusNumber(); + } + + return plusNumber; + } + + +} diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 519793d..e18a6a0 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,12 +1,17 @@ package lotto; +import camp.nextstep.edu.missionutils.Randoms; + +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; + public class Lotto { private final List numbers; public Lotto(List numbers) { - validate(numbers); + validate(numbers); //String 검증용 this.numbers = numbers; } @@ -16,5 +21,51 @@ private void validate(List numbers) { } } - // TODO: 추가 기능 구현 + public static ArrayList> LottoNumber(int count) { + + int i; + ArrayList> numberU = new ArrayList<>(); + + for (i = 0;i < count; ++i) { + List numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6); + numbers.sort(Comparator.naturalOrder()); + numberU.add(i, numbers); + } + + return numberU; + } + + public static int[] LottoWinning(ArrayList> numberU, List luckyNumber, int plusNumber, int count) { + int[] win = {0, 0, 0, 0, 0}; + int i; + + for(i = 0; i < count; ++i) { + int same = 0, p = 0; + boolean plus = numberU.get(i).contains(plusNumber); + if(plus) p = 1; + + (numberU.get(i)).retainAll(luckyNumber); + same = (numberU.get(i)).size(); + + if(same == 3) win[0] += 1; + if(same == 4) win[1] += 1; + if(same == 5) win[2] += 1; + if(same == 5 && p == 1) win[3] += 1; + if(same == 6) win[4] += 1; + } + + return win; + } + + public static double LottoReturnRate (int[] win, int count) { + int sum; + double avg; + + sum = win[0] * 5000 + win[1] * 50000 + win[2] * 1500000 + win[3] * 30000000 + win[4] * 2000000000; + avg = sum / ((double)(count * 1000)) * 100; + + avg = Math.round(avg * 10); + + return avg / 10; + } } diff --git a/src/main/java/lotto/Output.java b/src/main/java/lotto/Output.java new file mode 100644 index 0000000..02decc2 --- /dev/null +++ b/src/main/java/lotto/Output.java @@ -0,0 +1,58 @@ +package lotto; + +import java.util.ArrayList; +import java.util.List; + +public class Output { + + public static int userBuyOut() { + System.out.println("구입금액을 입력해 주세요."); + + int count = Input.userBuyIn(); + if(count != -1) { + System.out.println(" "); + System.out.println(count +"개를 구매했습니다."); + } + + return count; + } + + public static void usernumber(ArrayList> numbers, int count) { + int i; + for(i = 0; i < count; ++i) { + System.out.println(numbers.get(i)); + } + + } + + public static List luckyNumberOut() { + System.out.println(" "); + System.out.println("당첨 번호를 입력해 주세요."); + + List luckyNumber = new ArrayList<>(); + luckyNumber = Input.luckyNumberIn(); + + return luckyNumber; + } + + public static int plusNumberOut(List luckyNumber) { + System.out.println(" "); + System.out.println("보너스 번호를 입력해 주세요."); + + return Input.plusNumberIn(luckyNumber); + } + + public static void luckyResult(int[] win, double avg) { + System.out.println(" "); + System.out.println("당첨 통계"); + System.out.println("---"); + System.out.println("3개 일치 (5,000원) - "+ win[0] +"개"); + System.out.println("4개 일치 (50,000원) - "+ win[1] +"개"); + System.out.println("5개 일치 (1,500,000원) - "+ win[2] +"개"); + System.out.println("5개 일치, 보너스 볼 일치 (30,000,000원) - "+ win[3] +"개"); + System.out.println("6개 일치 (2,000,000,000원) - "+ win[4] +"개"); + System.out.println("총 수익률은 " + avg + "%입니다."); + } + + +} diff --git a/src/main/java/lotto/UserHelp.java b/src/main/java/lotto/UserHelp.java new file mode 100644 index 0000000..ee06bd3 --- /dev/null +++ b/src/main/java/lotto/UserHelp.java @@ -0,0 +1,25 @@ +package lotto; + +public class UserHelp { + + public static void errorUserBuy() { + System.out.println("[ERROR] 지불한 금액이 많거나 적습니다."); + throw new IllegalArgumentException(); + } + + public static void errorLuckyNumber_size() { + System.out.println("[ERROR] 로또 번호의 개수는 6개입니다."); + throw new IllegalArgumentException(); + } + + public static void errorLuckyNumber_number() { + System.out.println("[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다."); + throw new IllegalArgumentException(); + } + + public static void errorPlusNumber() { + System.out.println("[ERROR] 보너스 번호는 로또 당첨 번호에 없는 숫자여야 합니다."); + throw new IllegalArgumentException(); + } + +}