Skip to content

[행성 로또] 박소영 미션 제출합니다.#35

Open
soyeong0115 wants to merge 12 commits intowoowacourse-precourse:mainfrom
soyeong0115:soyeong0115
Open

[행성 로또] 박소영 미션 제출합니다.#35
soyeong0115 wants to merge 12 commits intowoowacourse-precourse:mainfrom
soyeong0115:soyeong0115

Conversation

@soyeong0115
Copy link

🪐 javascript-planetlotto-precourse

우테코 로또 발매기인 행성 로또를 구현한다.


📝 구현 기능 목록

1. 로또 구입 금액 입력 받기

  • 구입금액을 입력해 주세요. 출력

  • 잘못된 입력값일 경우 throw문을 통해 예외 발생

    • [예외] 입력값이 없을 경우
    • [예외] 숫자가 아닌 값을 입력했을 경우 (문자, 기호)
    • [예외] 소수를 입력했을 경우
    • [예외] 음수 또는 0을 입력했을 경우
    • [예외] 공백이 있을 경우
    • [예외] 500원으로 나누어 떨어지지 않는 경우

테스트 목록

  • 입력값이 500원 단위일 때 올바르게 저장되는가?
  • 구입금액이 500원 단위가 아닐 때 예외가 발생한다.
  • 입력값이 없을 시 예외가 발생한다.
  • 숫자가 아닌 입력(문자, 기호) 시 예외가 발생한다.
  • 소수 입력 시 예외가 발생한다.
  • 음수 또는 0 입력 시 예외가 발생한다.
  • 공백 입력 시 예외가 발생한다.

2. 발행한 로또 수량 출력하기

  • 발행한 로또 수량 구하기 (로또 구입 금액 / 500)
  • 2개를 구매했습니다. 출력

테스트 목록

  • 구입금액에 따라 로또 수량이 올바르게 계산된다.

3. 발행한 로또 번호 출력하기

  • 로또 발행하기

    • 중복되지 않는 5개의 숫자 뽑기 (Random 값 추출은 Random. pickUniqueNumbersInRange() 활용)
    • 로또 번호는 오름차순으로 정렬
    • 발행한 로또 수량만큼 반복

테스트 목록

  • 한 장의 로또 번호가 5개인지 확인한다.
  • 5개의 번호 중 중복된 숫자가 없는지 확인한다.
  • 5개의 번호가 오름차순으로 정렬되는지 확인한다.
  • 모든 숫자가 1~30 범위인지 확인한다.
  • 발행된 로또 수량이 구입 수량과 일치하는가?

4. 당첨 번호 입력 받기

  • 당첨 번호를 입력해 주세요. 출력

  • 쉼표(,)를 기준으로 번호 구분하기

  • 잘못된 입력값일 경우 throw문을 통해 예외 발생

    • [예외] 입력값이 없을 경우
    • [예외] 공백이 있을 경우
    • [예외] 1 ~ 30 범위의 정수가 아닐 경우
    • [예외] 중복되는 숫자가 있을 경우
    • [예외] 5개가 아닐 경우

테스트 목록

  • 입력값이 없을 시 예외가 발생한다.
  • 문자, 기호, 소수 입력 시 예외가 발생한다. (*쉼표 제외)
  • 공백 입력 시 예외가 발생한다.
  • 1 ~ 30 범위를 벗어난 숫자 입력 시 예외가 발생한다.
  • 중복된 숫자 입력 시 예외가 발생한다.
  • 당첨 번호의 개수가 5개가 아닐 시 예외가 발생한다.

5. 보너스 번호 입력 받기

  • 보너스 번호를 입력해 주세요. 출력

  • 잘못된 입력값일 경우 throw문을 통해 예외 발생

    • [예외] 입력값이 없을 경우
    • [예외] 숫자가 아닌 값을 입력했을 경우 (문자, 기호)
    • [예외] 소수를 입력했을 경우
    • [예외] 음수를 입력했을 경우
    • [예외] 공백이 있을 경우
    • [예외] 1 ~ 30 범위의 숫자가 아닐 경우
    • [예외] 당첨 번호와 중복될 경우

테스트 목록

  • 유효한 숫자 입력 시 올바르게 저장되는지 확인한다.
  • 입력값이 없을 시 예외가 발생한다.
  • 숫자가 아닌 입력(문자, 기호) 시 예외가 발생한다.
  • 소수 입력 시 예외가 발생한다.
  • 공백 입력 시 예외가 발생한다.
  • 1 ~ 30 범위를 벗어난 숫자 입력 시 예외가 발생한다.
  • 당첨 번호와 중복되는 숫자 입력 시 예외가 발생한다.

6. 당첨 내역 출력하기

  • 사용자가 구매한 로또 번호와 당첨 번호 비교하기
  • 당첨 내역 출력하기

테스트 목록

  • 각 로또 번호와 당첨 번호 일치 개수를 정확히 계산한다.
  • 5개 번호 일치 시 1등으로 계산된다.
  • 4개 번호 일치 + 보너스 번호 포함 시 2등으로 계산된다.
  • 4개 번호 일치 시 3등으로 계산된다.
  • 3개 번호 일치 + 보너스 번호 일치 시 4등으로 계산된다.
  • 2개 번호 일치 + 보너스 번호 일시 시 5등으로 계산된다.
  • 일치 개수에 따라 통계 객체가 올바르게 갱신된다.

7. 에러 메시지 출력 후 재입력 받기

  • 사용자가 잘못된 값을 입력할 경우 [ERROR]로 시작하는 메시지를 출력
  • 해당 입력 단계부터 다시 입력 받기


기능 요구 사항

본 프로그램의 목적은 기능 구현에 그치는 것이 아니라 프리코스에서 학습한 개발 방식(문제 분해, 설계, TDD)이 코드에 드러나는 것에 있다.

  • 입력/출력 역할은 제공된 InputView, OutputView에서 수행하며 기존 메서드를 수정, 삭제할 수 없다.

  • 로또 번호의 숫자 범위는 1~30까지이다.

  • 1개의 로또를 발행할 때 중복되지 않는 5개의 숫자를 뽑는다.

  • 당첨 번호 추첨 시 중복되지 않는 숫자 5개와 보너스 번호 1개를 뽑는다.

  • 당첨은 1등부터 5등까지 있다. 당첨 기준과 금액은 아래와 같다.

  • 1등: 5개 번호 일치 / 100,000,000원

  • 2등: 4개 번호 + 보너스 번호 일치 / 10,000,000원

  • 3등: 4개 번호 일치 / 1,500,000원

  • 4등: 3개 번호 일치 + 보너스 번호 일치 / 500,000원

  • 5등: 2개 번호 일치 + 보너스 번호 일치 / 5,000원

  • 로또 구입 금액을 입력하면 구입 금액에 해당하는 만큼 로또를 발행해야 한다.

  • 로또 1장의 가격은 500원이다.

  • 당첨 번호와 보너스 번호를 입력받는다.

  • 사용자가 구매한 로또 번호와 당첨 번호를 비교하여 당첨 내역을 출력하고 로또 게임을 종료한다.

  • 사용자가 잘못된 값을 입력할 경우 "[ERROR]"로 시작하는 메시지와 함께 Error를 발생시키고 해당 메시지를 출력한 다음 해당 지점부터 다시 입력을 받는다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments