From d095e13ceeee7d6a8b28b7273b850bf996c8caa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=A8=EC=A2=85=ED=98=81?= Date: Fri, 15 Mar 2024 03:53:46 +0900 Subject: [PATCH 1/2] first --- src/main/java/lotto/Application.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index d190922..33e648d 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,7 +1,19 @@ package lotto; +import java.util.Scanner; + public class Application { public static void main(String[] args) { // TODO: 프로그램 구현 + System.out.println("구입금액을 입력해 주세요."); + + Scanner s = new Scanner(System.in); + + int PriceAmount = s.nextInt(); + + PriceAmount = PriceAmount / 1000; + + System.out.println(PriceAmount + "개를 구매했습니다."); + } } From 7b3ca37eb0094206d98fb91d1362cfec9f5cc407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=A8=EC=A2=85=ED=98=81?= Date: Fri, 15 Mar 2024 23:20:09 +0900 Subject: [PATCH 2/2] second --- src/main/java/lotto/Application.java | 25 +++++--- src/main/java/lotto/Lotto.java | 86 +++++++++++++++++++++++++++- 2 files changed, 102 insertions(+), 9 deletions(-) diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index 33e648d..d53e641 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,19 +1,30 @@ package lotto; -import java.util.Scanner; +import java.util.ArrayList; +import java.util.List; public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 - System.out.println("구입금액을 입력해 주세요."); - Scanner s = new Scanner(System.in); + List lottoNumbers = new ArrayList<>(); - int PriceAmount = s.nextInt(); + for (int i = 0; i < 7; i++) { + int number = generateUniqueRandomNumber(lottoNumbers); + lottoNumbers.add(number); + } - PriceAmount = PriceAmount / 1000; + Lotto lotto = new Lotto(lottoNumbers); - System.out.println(PriceAmount + "개를 구매했습니다."); + lotto.Play(); + } + // 중복되지 않는 랜덤 숫자를 생성하는 메서드 + private static int generateUniqueRandomNumber(List numbers) { + int number; + do { + number = (int) (Math.random() * 45) + 1; + } while (numbers.contains(number)); + return number; } + } diff --git a/src/main/java/lotto/Lotto.java b/src/main/java/lotto/Lotto.java index 519793d..078f7cb 100644 --- a/src/main/java/lotto/Lotto.java +++ b/src/main/java/lotto/Lotto.java @@ -1,9 +1,18 @@ package lotto; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; public class Lotto { private final List numbers; + private int money; + private List select_numbers = new ArrayList<>(); + private final int[] ranking = new int[8]; public Lotto(List numbers) { validate(numbers); @@ -11,10 +20,83 @@ public Lotto(List numbers) { } private void validate(List numbers) { - if (numbers.size() != 6) { + if (numbers.size() != 7) { + System.out.println("[ERROR] 로또 번호 개수는 7개어야 합니다."); + throw new IllegalArgumentException(); + } + + for (Integer number : numbers) { + if (number > 45 || number < 1) { + System.out.println("[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다."); + throw new IllegalArgumentException(); + } + } + } + + private void getMoney() { + System.out.println("구입 금액을 입력해 주세요."); + money = Integer.parseInt(Console.readLine()); + + if (money % 1000 != 0) { + System.out.println("[ERROR] 로또 금액을 잘못 입력하였습니다.."); throw new IllegalArgumentException(); } + System.out.printf("\n%d개를 구매했습니다.\n", money / 1000); + } + + private void viewNumbers() { + for (int i = 0; i < money / 1000; i++) { + List lottoNumbers = Randoms.pickUniqueNumbersInRange(1, 45, 7); // 새로운 로또 번호를 생성 + System.out.println(lottoNumbers); + } + } + + private void getSelectNumbers() { + System.out.println("당첨 번호를 입력해 주세요."); + select_numbers = Stream.of(Console.readLine().split(",")).map(Integer::parseInt).collect(Collectors.toList()); + System.out.println("\n보너스 번호를 입력해 주세요."); + select_numbers.add(Integer.parseInt(Console.readLine())); + validate(select_numbers); + } + + private void Extract() { + for (int i = 0; i < money / 1000; i++) { + checkLottoNumbers(numbers); + } + } + + private void checkLottoNumbers(List number) { + int correct_lotto_numbers = 0; + for (int i = 0; i < number.size(); i++) { + if (select_numbers.get(i).equals(number.get(i))) { + correct_lotto_numbers++; + } + } + if (correct_lotto_numbers == 5 && number.contains(select_numbers.get(6))) { + ranking[0]++; // 2등. + return; + } + ranking[7 - correct_lotto_numbers]++; + } + + private void lottoResult() { + System.out.println("당첨 통계\n---"); + + System.out.printf("3개 일치 (5,000원) - %d개\n", ranking[4]); + System.out.printf("4개 일치 (50,000원) - %d개\n", ranking[3]); + System.out.printf("5개 일치 (1,500,000원) - %d개\n", ranking[2]); + System.out.printf("5개 일치, 보너스 볼 일치 (30,000,000원) - %d개\n", ranking[0]); + System.out.printf("6개 일치 (2,000,000,000원) - %d개\n", ranking[1]); + System.out.printf("총 수익률은 %.1f", + (float) (ranking[4] * 5000 + ranking[3] * 50000 + ranking[2] * 1500000 + ranking[0] * 30000000 + ranking[1] * 2000000000) / money); + System.out.print("%입니다."); } - // TODO: 추가 기능 구현 + void Play() { + getMoney(); // 구입 금액 입력 + viewNumbers(); // 로또 구매 결과 출력 + getSelectNumbers(); // 당첨 , 보너스 번호 입력 + Extract(); // 로또 번호 추첨 + lottoResult(); // 결과 출력 + } }