Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

웹 백엔드, 웹 프론트엔드 레벨 1 자판기 미션 제작을 요청합니다. #55

Open
2 of 7 tasks
woowahan-pjs opened this issue Apr 21, 2021 · 4 comments
Open
2 of 7 tasks
Assignees

Comments

@woowahan-pjs
Copy link
Contributor

woowahan-pjs commented Apr 21, 2021

제작이 필요한 기능 혹은 서비스 이름: 웹 백엔드, 웹 프론트엔드 레벨 1 자판기 미션
(e.g. 4기 프리코스를 위한 새로운 미션, nextstep 플랫폼의 스토리보드 등)

완료 희망일: 2021년 5월 10일

기간에 해당하는 레벨을 선택해 주세요.

  • 레벨 2: 웹 프로그래밍 개발은 미숙하기 때문에 서비스 제작은 MVP가 존재해야 합니다.
  • 레벨 3: 기획부터 개발까지 모든 것에 참여할 수 있습니다.
  • 레벨 4: 제작보다 취업 준비를 우선합니다.

제작에 필요한 도구와 프로그래밍 언어: 자바, 자바스크립트
(e.g. 피그마, 자바스크립트, 코틀린, 스프링 프레임워크, 리액트 등)

제작 범위를 선택해 주세요.

  • 기획
  • 디자인
  • 개발
  • 교보재

참고할 수 있는 기능, 서비스, 뼈대 코드 URL: http://github.com/woowahan-pjs/java-vendingmachine
(e.g. https://github.com/woowacourse/service-archive)

제작이 필요한 기능 혹은 서비스에 대해 구체적으로 설명해 주세요.:

1단계

반환되는 동전이 최소한이 되는 자판기를 구현한다.

  • 최소 개수의 동전으로 잔돈을 돌려준다.
    예) 1000원 넣고 650원짜리 음료를 선택했다면, 잔돈은 100, 100, 100, 50원으로 반환한다.
  • 지폐를 잔돈으로 반환하는 경우는 없다고 가정한다.

2단계

  • 음료수 추가
  • 뽑을 수 있는 음료수가 없으면 자동으로 잔돈 반환
@woowahan-pjs
Copy link
Contributor Author

woowahan-pjs commented Jul 1, 2021

1단계 - 잔돈 계산 모듈

기능 요구 사항

그저 반환되는 동전이 최소한이 되는 자판기 잔돈 계산 모듈을 구현해서 제공하면 충분하다.

  • 최소 개수의 동전으로 잔돈을 돌려준다. 예) 1000원 넣고 650원짜리 음료를 선택했다면, 잔돈은 100, 100, 100, 50원으로 반환한다.
  • 지폐를 잔돈으로 반환하는 경우는 없다고 가정한다.

2단계 - 돈통

기능 요구 사항

  • 입력한 금액으로 동전을 무작위로 생성한다.
  • 잔돈을 돌려줄 때 현재 보유한 최소 개수의 동전으로 잔돈을 돌려준다.
  • 사용자가 입력한 금액에 대한 잔돈을 반환할 수 없는 경우 입력한 금액을 그대로 반환한다.

3단계 - 자판기

기능 요구 사항

  • 상품명, 수량, 금액을 추가할 수 있다.
    • 상품의 최소 금액은 100원이며, 10원으로 나누어 떨어져야 한다.
  • 사용자가 입력한 금액으로 상품 구매할 수 있다.
  • 남은 금액이 상품 최소 금액보다 적거나 모든 상품이 소진된 경우 바로 잔돈을 돌려준다.
  • 잔돈을 반환할 수 없는 경우 잔돈으로 반환할 수 있는 금액만 반환한다.

실행 결과

자판기가 보유하고 있는 금액을 입력해 주세요.
450

상품명과 수량, 금액을 입력해 주세요.
[콜라,20,1500];[사이다,10,1000]

투입 금액을 입력해 주세요.
3000

남은 금액: 3000원
구매할 상품명을 입력해 주세요.
콜라

남은 금액: 1500원
구매할 상품명을 입력해 주세요.
사이다

남은 금액: 50원
잔돈
100원 - 4개
50원 - 1개

@woowahan-pjs
Copy link
Contributor Author

woowahan-pjs commented Aug 30, 2021

프론트엔드

  • 라이브러리 구현
  • 라이브러리 배포
  • 미션 구현 (with @woowapark)
  • 채점 코드 작성
  • 요구 사항 개선

백엔드

  • 라이브러리 구현
  • 라이브러리 배포
  • 미션 구현 (with @woowahan-pjs)
  • 채점 코드 작성
  • 요구 사항 개선

@woowahan-pjs
Copy link
Contributor Author

프로그래밍 요구 사항에 Randoms#pick(List)를 쓰도록 안내하는 것이 좋아 보인다.
(e.g. 동전 무작위 생성은 Randoms#pick(List) 메서드를 사용한다.)

Randoms으로도 다양한 방법으로 구현할 수 있다.

사례 1

final List<Coin> coins = new ArrayList<>();
final List<Integer> amounts = Coin.amounts();
while (total > 0) {
    final int amount = Randoms.pick(amounts);
    if (total - amount >= 0) {
        total -= amount;
        coins.add(Coin.from(amount));
    }
    if (total < MINIMUM_AMOUNT) {
        break;
    }
}

사례 2

public static int createRandomCoinCount(int chargeHoldingAmount, Coins coin) {
    int createMaxCountOfCoin = coin.calculateMaxCountOfCoin(chargeHoldingAmount);
    return Randoms.pick(0, createMaxCountOfCoin);
}

public int calculateMaxCountOfCoin(int chargeHoldingAmount) {
    return chargeHoldingAmount / amount;
}

@woowahan-pjs
Copy link
Contributor Author

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

No branches or pull requests

3 participants