로또 게임 기능을 구현해야 한다. 로또 게임은 아래와 같은 규칙으로 진행된다.
- 로또 번호의 숫자 범위는 1~45까지이다.
- 1개의 로또를 발행할 때 중복되지 않는 6개의 숫자를 뽑는다.
- 당첨 번호 추첨 시 중복되지 않는 숫자 6개와 보너스 번호 1개를 뽑는다.
- 당첨은 1등부터 5등까지 있다. 당첨 기준과 금액은 아래와 같다.
- 1등: 6개 번호 일치 / 2,000,000,000원
- 2등: 5개 번호 + 보너스 번호 일치 / 30,000,000원
- 3등: 5개 번호 일치 / 1,500,000원
- 4등: 4개 번호 일치 / 50,000원
- 5등: 3개 번호 일치 / 5,000원
14000
1,2,3,4,5,6
7
8개를 구매했습니다.
[8, 21, 23, 41, 42, 43]
[3, 5, 11, 16, 32, 38]
[7, 11, 16, 35, 36, 44]
[1, 8, 11, 31, 41, 42]
[13, 14, 16, 38, 42, 45]
[7, 11, 30, 40, 42, 43]
[2, 13, 22, 32, 38, 45]
[1, 3, 5, 14, 22, 45]
3개 일치 (5,000원) - 1개
4개 일치 (50,000원) - 0개
5개 일치 (1,500,000원) - 0개
5개 일치, 보너스 볼 일치 (30,000,000원) - 0개
6개 일치 (2,000,000,000원) - 0개
총 수익률은 62.5%입니다.
[ERROR] 로또 번호는 1부터 45 사이의 숫자여야 합니다.
구입금액을 입력해 주세요.
8000
8개를 구매했습니다.
[8, 21, 23, 41, 42, 43]
[3, 5, 11, 16, 32, 38]
[7, 11, 16, 35, 36, 44]
[1, 8, 11, 31, 41, 42]
[13, 14, 16, 38, 42, 45]
[7, 11, 30, 40, 42, 43]
[2, 13, 22, 32, 38, 45]
[1, 3, 5, 14, 22, 45]
당첨 번호를 입력해 주세요.
1,2,3,4,5,6
보너스 번호를 입력해 주세요.
7
당첨 통계
---
3개 일치 (5,000원) - 1개
4개 일치 (50,000원) - 0개
5개 일치 (1,500,000원) - 0개
5개 일치, 보너스 볼 일치 (30,000,000원) - 0개
6개 일치 (2,000,000,000원) - 0개
총 수익률은 62.5%입니다.
Lotto: 로또 번호 생성과 당첨 여부 확인
LottoGame: 로또 게임 진행, 당첨 번호 입력 및 결과 확인
LottoShop: 로또 구매 및 발급
InputValidator: 입력값 유효성 검사 및 예외 처리
ResultPrinter: 결과 출력 담당
ConsoleManager: 콘솔 입력 및 출력 관리
ProfitCalculator: 수익률 계산 담당
package lotto;
import java.util.List;
public class LottoGame {
public void startGame() {
// 게임 시작
LottoShop lottoShop = new LottoShop();
Lotto winningLotto = Lotto.createRandomLotto();
LottoTicket purchasedTickets = lottoShop.buyLottoTicket();
List<Lotto> lottos = purchasedTickets.getLottos();
InputValidator validator = new InputValidator();
List<Integer> winningNumbers = validator.getValidWinningNumbers();
int bonusNumber = validator.getValidBonusNumber();
ResultChecker resultChecker = new ResultChecker();
int matchCount;
int totalMatchCount = 0;
int manualTicketCount = 0;
for (Lotto lotto : lottos) {
matchCount = resultChecker.checkResult(lotto, winningLotto, winningNumbers, bonusNumber);
if (matchCount == Lotto.LOTTO_SIZE) {
manualTicketCount++;
}
totalMatchCount += matchCount;
}
ResultPrinter resultPrinter = new ResultPrinter();
resultPrinter.printResult(winningLotto, winningNumbers, bonusNumber, lottos.size(), manualTicketCount, totalMatchCount);
ProfitCalculator profitCalculator = new ProfitCalculator();
profitCalculator.calculateProfit(lottos.size(), totalMatchCount);
}
}
로또 게임은 다음과 같은 과정으로 진행됩니다:
이렇게 구성된 로또 게임은 사용자의 입력과 랜덤한 번호 생성, 그리고 당첨 결과 확인을 통해 게임이 진행되고, 최종적으로 당첨 결과와 수익률이 출력됩니다.