자동판매기 잔돈계산 (파이썬, C++ 예제)

이전 게시물 중 자동판매기를 구현한 2가지 코드가 있었습니다.

자판기 코드의 완성도를 높이기 위해 잔돈 반환 기능을 넣어본다면 어떨까요?

그냥 남은 잔액만 표시(잔액 : 1234원)되는 것이 아닌, 500원, 100원, 50원, 10원, 1원 동전으로 말이죠.

물론 동전은 가능하면 큰 단위로 나오는 것이 편리합니다.

예) 잔액이 1234원인 경우 아래 그림처럼 나오도록 할 수 없을까요?


심화반 수업중에 이런 질문을 하신 분이 있어 만들어 보았습니다.

먼저 어떻게 만들어야 할지 생각해 보겠습니다.
  1. 잔액 확인 (입력을 통해 처리)
  2. 단위가 큰 동전부터 처리해야 함
  3. 잔액(예 1234원)을 큰 동전부터 나누어 몫과 나머지를 이용
  4. 1234 / 500원 = 몫(2), 나머지 (234)
  5. 234 / 100원 = 몫(2), 나머지 (34)
  6. 34 / 50원 = 몫 (0), 나머지 (34)
  7. 34 / 10원 = 몫 (3), 나머지 (4)
  8. 4 / 1원 = 몫 (4), 나머지 (0)
  9. 결과 : 500원 2개, 100원 2개, 50원 0개, 10원 3개, 1원 4개

먼저 C++ 로 만든 잔돈 반환 코드입니다.
#include <iostream>

using namespace std;

int main()
{
    int x;
    cout << "거스름돈 입력 : ";
    cin >> x;

    if (x <= 0)
    {
        cout << "거스름돈 없음" << endl;
        return 0;
    }
        
    int y500 = 0, y100 = 0, y50 = 0, y10 = 0, y1 = 0;

    y500 = x / 500;    x = x % 500;

    y100 = x / 100;    x %= 100;

    y50 = x / 50; x %= 50;

    y10 = x / 10; x %= 10;

    y1 = x;

    cout << "500원\t: " << y500 << "개" << endl;
    cout << "100원\t: " << y100 << "개" << endl;
    cout << "50원\t: " << y50 << "개" << endl;
    cout << "10원\t: " << y10 << "개" << endl;
    cout << "1원\t: " << y1 << "개" << endl;
}

다음은 파이썬으로 만든 잔돈 반환 코드입니다.
x = int( input('거스름돈 입력 : ') )

if x <= 0:
    print('거스름돈 없음')
    import sys
    sys.exit()

y500 = x//500; x %= 500
y100 = x//100; x %= 100
y50 = x//50; x %= 50
y10 = x//10; x %= 10
y1 = x

print('500원\t:', y500, '개')
print('100원\t:', y100, '개')
print('50원\t:', y50, '개')
print('10원\t:', y10, '개')
print('1원\t:', y1, '개')

C++, 파이썬 둘다 결과는 동일합니다.

감사합니다.

댓글

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)