자판기 잔돈반환 알고리즘을 어떻게짜야할까요?

화폐 재고까지 연동시키고싶은데 if문 도배해서 노가다하니까 답이 없네요..

c#,java로 해보고싶습니다. 예를 들어 37600원을 내줘야하는데

만원짜리가 2장밖에 재고가 없으면 이걸 어떻게 해서 줘야하는지 갑갑하네요.

    1개의 답변이 있어요!

    • 가장 큰 단위수부터 자릅니다.

      간단하게 1만원, 1천원, 1백원 만있다고 가정합니다.

      37600 이면

      우선 1만원짜리로 자릅니다. 1, 1, 1, 3장 하면 7600이남죠.

      그다음엔 1천원짜리로 자릅니다. 7장이고 600원이 남죠.

      그다음엔 100원짜리로 자릅니다. 6개고 0원이 남죠.

      미리 정해둔 단위수로 자르는 재귀함수를 짜시면됩니다.

      예를들어 만원짜리가 2장밖에 없는경우

      우선 1만원짜리로 자릅니다. 1, 1, 1, 3장 하면 7600이남죠.

      >> 여기서 37600-10000 = true, 37600-10000 = true 까진 성공이지만

      37600-10000 을 다시하려고하면 1만원짜리가없어서 실패합니다.

      그럼 다음 페이즈인 1천원짜리로 넘기면됩니다.

      그럼이제 17600-1000 =true .... 식으로 하여 1000원짜리가 부족하지않다면

      600-1000 이 될겁니다. 그럼 -400원이 떠버리죠.

      -값이 뜨면 다음 페이즈로 넘어가면 됩니다.

      그럼 이제 600-100... 으로 넘어가고 결국에

      100-100 = 0 이 되면 끝난거죠.

      그럼 그전에 count 한 단위만큼 지폐를 출력해주면 됩니다.

      이때 주의하실게 결국 모든 페이즈를 다 지나가도 잔돈을 반환할수 없는 경우입니다.

      참고로 실제 자판기의 경우 이럴때 대단한 뭔가 해주지않습니다.

      그냥 반환할수있는 돈이 부족하니 자판기 관리자에게 연락하라고 하고 끝입니다^^

      어디에 쓰시는 프로그램인지 모르겠지만 작성자분도 그정도만 예외처리 해주시면될것으로 보입니다.