Skip to content

로또 게임 구현을 관리하는 저장소

Notifications You must be signed in to change notification settings

kang-jisu/java-lotto

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# 로또
## 진행 방법
* 로또 요구사항을 파악한다.
* 요구사항에 대한 구현을 완료한  자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR) 통해 코드 리뷰 요청을 한다.
* 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다.
* 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다.

## 온라인 코드 리뷰 과정
* [텍스트와 이미지로 살펴보는 온라인 코드 리뷰 과정](https://github.com/next-step/nextstep-docs/tree/master/codereview)

[STEP1] 문자열 사칙 연산 계산기 구현

  • 이번 미션의 핵심은 내가 구현하는 코드에 단위 테스트를 추가하는 경험을 하는 것이다.
  • 모든 예외 상황을 처리하기 위해 너무 복잡하게 접근하지 않아도 된다.

기능 요구사항

  • 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다.
  • 입력 문자열의 숫자와 사칙 연산 사이에는 반드시 빈 공백 문자열이 있다고 가정한다.
  • 나눗셈의 경우 결과 값을 정수로 떨어지는 값으로 한정한다.
  • 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다.
  • 예를 들어 2 + 3 * 4 / 2와 같은 문자열을 입력할 경우 2 + 3 * 4 / 2 실행 결과인 10을 출력해야 한다.

요구사항 정리

  • 사용자의 입력 문자열 값에 따라 사칙연산을 수행하고 결과를 반환한다.
  • 사용자의 입력을 빈 공백 문자열로 구분한다.
    • 입력 값이 null이거나 빈 공백 문자열이 들어올 수 없다.
    • 입력 값 배열 길이는 3 이상이다.
    • 입력 값 배열 길이는 짝수이다.
  • 숫자, 연산자, 숫자를 받아 값을 계산한다.
    • 덧셈
    • 뺄셈
    • 곱셈
    • 나눗셈
  • 연산자는 사칙연산 기호(+,-,*,/)에 속한다.
  • 중간에 계산된 값은 다음 연산의 입력 값이 된다.

[STEP2] 로또(자동) 구현

기능 요구사항

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

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

  • 구입 금액을 입력받는다.

    • 입력받은 금액은 1000원 단위이다.
    • 0 이상, 1000원 단위가 아니면 예외가 발생한다.
  • 구입 금액으로 구매한 로또의 개수를 계산한다.

    • 로또 개수는 0개 이상이다.
  • 하나의 로또에 6개의 번호가 자동으로 생성된다.

    • 번호는 1~45 사이의 번호이다.
  • 자동 생성된 로또 번호가 로또 개수만큼 출력된다.

  • 지난주 당첨 번호를 ','로 구분하여 6개 입력받는다.

    • 구분자는 ','이다.
    • 당첨 번호는 6개이다.
  • 당첨 통계를 계산한다.

    • 3개의 숫자가 일치하면 5000원이다.
    • 4개의 숫자가 일치하면 50000원이다.
    • 5개의 숫자가 일치하면 1500000원이다.
    • 6개의 숫자가 일치하면 2000000000원이다.
  • 일치하는 개수만큼의 금액과 구입 금액으로 수익률을 계산한다.

구입금액을 입력해 주세요.
14000
14개를 구매했습니다.
[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]
[23, 25, 33, 36, 39, 41]
[1, 3, 5, 14, 22, 45]
[5, 9, 38, 41, 43, 44]
[2, 8, 9, 18, 19, 21]
[13, 14, 18, 21, 23, 35]
[17, 21, 29, 37, 42, 45]
[3, 8, 27, 30, 35, 44]

지난  당첨 번호를 입력해 주세요.
1, 2, 3, 4, 5, 6

당첨 통계
---------
3 일치 (5000)- 1
4 일치 (50000)- 0
5 일치 (1500000)- 0
6 일치 (2000000000)- 0
 수익률은 0.35입니다.(기준이 1이기 때문에 결과적으로 손해라는 의미임)

힌트

  • 로또 자동 생성은 Collections.shuffle() 메소드 활용한다.
  • Collections.sort() 메소드를 활용해 정렬 가능하다.
  • ArrayList의 contains() 메소드를 활용하면 어떤 값이 존재하는지 유무를 판단할 수 있다.

[STEP3] 로또 (2등)

기능 요구사항

  • 2등을 위해 추가 번호를 하나 더 추첨한다.

  • 당첨 통계에 2등도 추가해야 한다.

  • 보너스 볼을 입력받는다.

  • 보너스 볼은 1에서 45사이이다.

  • 보너스 볼은 당첨 번호와 같을 수 없다.

  • 구입한 로또와 당첨 로또 교집합의 사이즈가 5이고, 보너스 볼은 포함하지 않으면 3등이다.

  • 구입한 로또와 당첨 로또 교집합의 사이즈가 5이고, 보너스 볼을 포함하면 2등이다.

  • 구입한 로또와 당첨 로또 교집합의 사이즈가 6이면 1등이다.

[... 생략 ...]

지난  당첨 번호를 입력해 주세요.
1, 2, 3, 4, 5, 6
보너스 볼을 입력해 주세요.
7
        
당첨 통계
---------
3 일치 (5000)- 1
4 일치 (50000)- 0
5 일치 (1500000)- 0
5 일치, 보너스  일치(30000000) - 0
6 일치 (2000000000)- 0
 수익률은 0.35입니다.(기준이 1이기 때문에 결과적으로 손해라는 의미임)

프로그래밍 요구사항

  • 일급 컬렉션
  • Java Enum 활용

[STEP4] 로또(수동)

기능 요구사항

  • 현재 로또 생성기는 자동 생성 기능만 제공한다. 사용자가 수동으로 추첨 번호를 입력할 수 있도록 해야 한다.

  • 입력한 금액, 자동 생성 숫자, 수동 생성 번호를 입력하도록 해야 한다.

  • 수동 입력 수는 0이상이다.

  • 수동 입력 수는 구입금액 이하이다.

  • 구입 개수에서 수동 입력 수를 뺀 만큼 자동로또가 생성된다.

  • 구입 개수와 생성 방식(자동,수동)을 입력하면 그만큼의 로또가 생성된다.

구입금액을 입력해 주세요.
14000

수동으로 구매할 로또 수를 입력해 주세요.
3

수동으로 구매할 번호를 입력해 주세요.
8, 21, 23, 41, 42, 43
3, 5, 11, 16, 32, 38
7, 11, 16, 35, 36, 44

수동으로 3, 자동으로 11개를 구매했습니다.
[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]
[23, 25, 33, 36, 39, 41]
[1, 3, 5, 14, 22, 45]
[5, 9, 38, 41, 43, 44]
[2, 8, 9, 18, 19, 21]
[13, 14, 18, 21, 23, 35]
[17, 21, 29, 37, 42, 45]
[3, 8, 27, 30, 35, 44]

지난  당첨 번호를 입력해 주세요.
1, 2, 3, 4, 5, 6
보너스 볼을 입력해 주세요.
7

당첨 통계
---------
3 일치 (5000)- 1
4 일치 (50000)- 0
5 일치 (1500000)- 0
5 일치, 보너스  일치(30000000) - 0
6 일치 (2000000000)- 0
 수익률은 0.35입니다.(기준이 1이기 때문에 결과적으로 손해라는 의미임)

프로그래밍 힌트

  • 규칙 3: 모든 원시값과 문자열을 포장한다.
  • 로또 숫자 하나는 int 타입이다. 이 숫자 하나를 추상화한 LottoNo 객체를 추가해 구현한다.
  • 예외 처리를 통해 에러가 발생하지 않도록 한다.
  • 사용자가 잘못된 값을 입력했을 때 java exception으로 에러 처리를 한다.
  • java8에 추가된 Optional을 적용해 NullPointerException이 발생하지 않도록 한다.

About

로또 게임 구현을 관리하는 저장소

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%