gilbert9172 2024. 11. 3. 14:53

 

❐ Description


과제 기한 2024.10.29(화) 15:00 ~ 2024.11.05(월) 23:59
과제 진행 Branch https://github.com/Gilbert9172/java-lotto-7
과제 제출 PR 링크 TBD
Git convention https://gist.github.com/stephenparish/9941e89d80e2bc58a153#file-commit-md

 

 

 

 

 

❐ Requirements


1. User

  • 로또를 구입할 수  있다.
  • 구매한 로또가 모두 일치하지 않을 수 있다.
  • 총 세 번의 입력을 할 수 있다.(잘못 입력한 경우 댜시 입력을 할 수 있다.)
    • 금액을 입력할 수 있다.
      • 안내문구 : "구입금액을 입력해 주세요."
      • 로또 한장의 가격은 1000원이다.
      • 1000원 단위로만 구입할 수 있다.
    • 당첨 번호를 입력할 수 있다.
      • 안내 문구 : `당첨 번호를 입력해 주세요.`
      • 쉼표(,)를 기준으로 구분한다.
    • 보너스 번호를 입력할 수 있다.
      • 안내 문구 : `보너스 번호를 입력해 주세요.`
      • 당첨번호와 중복되는 않는 숫자를 입력한다.
    • 총 두 번의 결과를 제공 받는다.
      • 로또 구매후
        • 구입 금액 만큼의 로또를 발행 받는다.
        • 발행된 로또 정보를 오름차순으로 확인할 수 있다.
      • 게임 종료 후
        • 당첨 내역
        • 수익률(소수점 둘째 자리에서 반올림된 값이다.)

 

2. System

  • 로또 한 장의 가격은 1000원이다. 
  • 로또 발행 규칙은 다음과 같다.
    • 로또 숫자의 범위는 1~45다.
    • 중복되지 않은 6개의 숫자와 보너스 번호 1개를 뽑는다.
      • 보너스 번호는 앞에 뽑은 6개의 번호 중 어떤 수와도 동일할 수 없다.
    • 사용자에게 구입 금액 만큼 발행해야 한다.
  • 출력
    • 사용자가 구매 직후 안내 문구와 발행한 번호를 출력한다.
    • 안내 문구 : `${n}`개를 구매했습니다.
    • 발행 번호는 오름차순으로 정렬한다.
  • 로또 번호를 비교하여 다음의 결과를 출력하고 게임을 종료한다.
    • 당첨 내역
      • `${x}`개 일치 `(${reward}원)` - `${n}`개
      • `${x}`개 일치, 보너스 볼 일치  `(${reward}원)` - `${n}`개
    • 수익률
      • 안내 문구 : 총 수익률은 `${xx.xx}`%입니다.
      • 소수점 둘째 자리에서 반올림한다.
      • 퍼센테이지(%) 기호를 붙여야 한다.
        • Ex ) 100.0%, 51.5%, 1,000,000.0%
  • 사용자가 잘못된 값을 입력한 경우
    • 이때 IllegalArgumentException이 발생한다.
    • 에러 문구는 [Error]로 시작해야 한다.
    • 다시 입력을 받아야 한다.

 

 

 

 

 

❐ Validation Check List


1. 구입 금액 

  • 문자열
    • 숫자 이외의 문자르 입력한 경우
    • 입력하지 않는 경우
    • 음수
  • 변환
    • 문자열을 숫자로 변환
  • 단위
    • 1000원 단위로 입력하지 않은 경우
  • 전처리
    • 앞, 뒤 공백을 입력한 경우

 

2. 당첨 번호

  • Regex
    • 하나도 입력하지 않은 경우
    • 숫자 이외의 문자를 입력한 경우
    • 1~45 범위 내의 숫자를 입력하지 않은 경우
  • 갯수 & 중복
    • 6개 미만해서 입력한 경우
    • 6개 초과해서 입력한 경우
    • 중복된 수를 입력한 경우
  • 공백(전처리)
    • 구분자로 쉼표(,)를 기준으로 split
    • 앞, 뒤 공백 제거

 

3. 보너스 번호

  • Regex
    • 하나도 입력하지 않은 경우
    • 숫자 이외의 문자를 입력한 경우
    • 1~45 범위 내의 숫자를 입력하지 않은 경우
    • 1개 초과해서 입력한 경우
  • 중복
    • 당첨 번호와 중복된 수를 입력한 경우
  • 공백(전처리)
    • 앞, 뒤 공백을 입력한 경우

 

 

 

 

 

❐ Main Logic


 

  1. n개의 로또를 순회를 돌면서 당첨 번호를 비교한다.
  2. 5개가 일치한다면 보너스 번호를 비교한다.
  3. 일치한 번호의 갯수와 보너스 번호 일치 여부를 바탕으로 등수를 매긴다.
  4. 로또의 rank를 키 값으로하는 map을 업데이트 해준다. 

 

 

 

 

 

❐ Domain Modeling


GitHub Readme 링크

 

 

 

 

 

❐ Domain Logic


GitHub Readme 링크

 

 

 

 

 

❐ Business Logic


GitHub Readme 링크