- 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환 (예: “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6)
- 앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 “//”와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다. 예를 들어 “//;\n1;2;3”과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다.
- 문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw 한다.
-
숫자(Number)
- 음수가 될 수 없다.
- 1억을 넘을 수 없다.
- 다른 숫자와 덧셈을 할 수 있다.
-
구분자(Separator)
- 기본 구분자와 커스텀 구분자가 존재한다.
- 쉼표(,)와 콜론(:)을 기본 구분자로 사용한다.
- 기본 구분자와 커스텀 구분자가 존재한다.
-
구분자들(Separators)
- 구분자를 여러 개 가질 수 있다.
- 구분자를 추가할 수 있다.
- 구분자는 공백일 수 없다.
-
계산기(Calculator)
- 계산할 식을 하나의 문자열로 입력 받을 수 있다.
- 빈 문자열 또는
null
을 입력받은 경우 0을 반환한다.
- 빈 문자열 또는
- 입력받은 문자열을 숫자와 구분자로 분리할 수 있다.
- 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다.
- 분리된 숫자와 연산자를 통해 계산을 수행할 수 있다.
- 숫자 하나를 입력받은 경우 해당 숫자를 반환한다.
- 계산할 식을 하나의 문자열로 입력 받을 수 있다.
- 로또 구입 금액을 입력하면 구입 금액에 해당하는 로또를 발급해야 한다.
- 로또 1장의 가격은 1000원이다.
-
로또 구입 금액(LottoPurchaseAmount)
- 구입 금액은 1000원 단위의 자연수로만 가능하다.
- 구입 금액에 해당하는 로또 개수를 반환할 수 있다.
-
로또 구입 개수(LottoPurchaseCount)
- 구매 개수는 1 이상이다.
-
로또 볼(LottoBall)
- 하나의 번호를 가진다.
- 로또 번호는 1부터 45까지의 수로 구성된다.
-
로또 볼들(LottoBalls)
- 1개 이상의 로또 볼을 가질 수 있다.
- 각각의 로또 볼은 중복될 수 없다.
- 다른 로또 볼들과 비교해 같은 번호를 몇 개 가지고 있는지 반환할 수 있다.
-
로또 라인(LottoLine)
- 6개의 로또 볼을 가진 로또 볼들(LottoBalls)을 가진다.
- 하나의 문자열을 입력받아 하나의 로또 게임으로 변환할 수 있다.
-
로또 라인들(LottoLines)
- 한 개 이상의 로또 게임을 가지고 있다.
- 당첨 번호와 비교해 게임 결과를 반환할 수 있다.
-
로또 머신(LottoBallMachine)
- 로또 라인(LottoLine)을 생성할 수 있다.
-
로또 게임(LottoGame)
- 로또 구입 개수를 가지고 있다.
- 구입 개수를 반환할 수 있다.
- 로또 라인들(LottoLines)을 가지고 있다.
- 로또 라인 정보를 반환할 수 있다.
- 로또 머신(LottoMachine)을 가지고 있다.
- 로또 머신(LottoBallMachine)을 통해 로또 라인들을 생성할 수 있다.
- 로또 라인들과 당첨 번호를 비교하여 게임 결과(LottoGameResult)을 반환할 수 있다.
- 로또 구입 개수를 가지고 있다.
-
로또 등수(LottoRank)
- 1등부터 4등과 꽝으로 이루어져 있다.
- 각 등수에 해당하는 당첨금을 가지고 있다.
- 맞춘 숫자에 해당하는 등수를 반환할 수 있다.
-
게임 결과(LottoGameResult)
- 각 등수 별 당첨 횟수를 가지고 있다.
- 수익률을 계산할 수 있다.
-
수익률(LottoProfitRate)
- 당첨금 / 구입 금액으로 계산한다.
- 소수점 셋째 자리에서 버린다.
-
InputView
- 구입 금액을 입력받을 수 있다.
- 당첨 번호를 입력받을 수 있다.
-
OutputView
- 구입한 로또 게임들을 출력할 수 있다.
- 당첨 통계를 출력할 수 있다.
- 수익률을 출력할 수 있다.
- 수익률이 1 미만이면 "(기준이 1이기 때문에 결과적으로 손해라는 의미임)" 문구를 추가한다.
- 2등을 위해 추가 번호를 하나 더 추첨한다.
- 당첨 통계에 2등도 추가해야 한다.
-
당첨 번호 (WinningLotto)
- 하나의 로또 라인과 보너스 볼을 가진다.
- 다른 로또 라인과 비교해 일치하는 번호의 개수와 보너스 번호 일치 여부를 반환할 수 있다.
-
로또 등수(LottoRank)
- 1등부터 5등과 꽝으로 이루어져 있다.
- 2등은 5개의 일치하는 번호와 보너스 번호가 일치해야 한다.
- 각 등수에 해당하는 당첨금을 가지고 있다.
- 맞춘 숫자에 해당하는 등수를 반환할 수 있다.
- 1등부터 5등과 꽝으로 이루어져 있다.