실습과제
현명하게 거스름돈을 계산해 주는 프로그램을 만들려고 합니다. 예를 들어 33,000원짜리 물건을 사기 위해 100,000원을 냈다면,
50,000원 1장
10,000원 1장
5,000원 1장
1,000원 2장
이런 식으로 '가장 적은 수'의 지폐를 거슬러 주는 것입니다. 방금 같은 경우에는 총 5장을 거슬러 준 거죠.
우리는 calculate_change라는 함수를 작성하려고 하는데요. 이 함수는 지불한 금액을 나타내는 payment와 물건의 가격을 나타내는 cost를 파라미터로 받습니다.
아래의 코드에 이어서 깔끔하게 프로그램을 작성해 보세요.
def calculate_change(payment, cost):
# 코드를 작성하세요.
# 테스트
calculate_change(100000, 33000)
print()
calculate_change(500000, 378000)
함수를 쓰고 프로그램을 실행하면 아래와 같은 결과값이 콘솔에 출력되어야 합니다.
50000원 지폐: 1장
10000원 지폐: 1장
5000원 지폐: 1장
1000원 지폐: 2장
50000원 지폐: 2장
10000원 지폐: 2장
5000원 지폐: 0장
1000원 지폐: 2장
과제 해설
아이디어
예시를 통해 아이디어를 얻어 봅시다. 33,000원 하는 물건을 사는데 100,000원을 받았다고 가정할게요.
그러면 67,000원을 거슬러 줘야 하는데, 어떻게 해야 최소 지폐 개수로 거슬러 줄 수 있을까요?
머리를 좀 굴려 보면 알 수 있는데요. 가장 큰 지폐부터 넣어 보면 됩니다. 그러니까 처음에는 50,000원 지폐 몇 장을 거슬러 줄 수 있는지 보는 거죠. 50,000원 지폐로 거슬러 주는 것이 다른 작은 지폐로 거슬러 주는 것보다 무조건 좋기 때문에, 50,000원 지폐부터 보는 것입니다. 67,000원에는 50,000원이 한 번만 들어가기 때문에, 67,000원에서 50,000원을 빼서 17,000원이 남습니다.
그 다음으로 큰 10,000원 지폐를 봅시다. 17,000원에 10,000원이 몇 번 들어가나요? 한 번 들어가죠? 그러면 17,000원에서 10,000원을 빼서 7,000원이 남습니다.
그 다음으로 큰 5,000원 지폐를 봅시다. 7,000원에 5,000원이 몇 번 들어가나요? 한 번 들어가죠? 그러면 7,000원에서 5,000원을 빼서 2,000원이 남습니다.
마지막으로 1,000 지폐를 봅시다. 2,000원에 1,000원이 몇 번 들어가나요? 두 번 들어갑니다.
결론적으로,
50,000원 1장
10,000원 1장
5,000원 1장
1,000원 2장
이렇게 되는 것입니다.
코드
이제 우리가 생각한 걸 코드로 옮겨 봅시다.
거스름돈 총액
우리가 거슬러 줘야 하는 총액은 얼마인가요? 받은 돈에서 물건 가격을 빼면 되겠죠?
change = payment - cost # 거스름돈 총액
몇 장을 거슬러 줘야 할까?
67,000원을 거슬러 줘야 하면, 50,000원 지폐는 몇 장 주면 될까요? 67,000원에 50,000원이 몇 번 들어가는지 확인하면 되죠? 파이썬에서는 버림 나눗셈(//)을 사용하면 이를 알 수 있습니다.
change // 50000 # 50,000원 지폐 개수
거슬러 주고 얼마가 남았을까?
67,000원에서 50,000원으로 최대한 거슬러 주고 남은 금액은 17,000원입니다. 파이썬에서는 나머지 연산(%)을 사용하면 이를 알 수 있습니다.
change % 50000 # 50,000원 지폐로 거슬러 주고 남은 금액
만약 50,000원과 10,000원을 최대한 거슬러 주고 남은 금액은 뭘까요? 단순하게 생각하면 change % 50000 % 10000인데요. 조금만 머리를 굴려 보면 이게 change % 10000과 같다는 걸 알 수 있습니다. 50,000은 10,000의 배수이기 때문이죠!
그럼 50,000원, 10,000원, 5,000원을 최대한 거슬로 주고 남은 금액은 어떻게 계산할까요? 단순하게 생각하면 change % 50000 % 10000 % 5000이지만, 그냥 간단하게 change % 5000만 해도 똑같은 결과가 나옵니다. 50,000과 10,000은 둘 다 5,000의 배수이기 때문입니다!
모범 답안
위 개념들을 조합해서 이런 코드를 작성할 수 있습니다.
def calculate_change(payment, cost):
change = payment - cost # 거스름돈 총액
fifty_count = change // 50000 # 50,000원 지폐
ten_count = (change % 50000) // 10000 # 10,000원 지폐
five_count = (change % 10000) // 5000 # 5,000원 지폐
one_count = (change % 5000) // 1000 # 1,000원 지폐
# 답 출력
print("50000원 지폐: {}장".format(fifty_count))
print("10000원 지폐: {}장".format(ten_count))
print("5000원 지폐: {}장".format(five_count))
print("1000원 지폐: {}장".format(one_count))
# 테스트
calculate_change(100000, 33000)
50000원 지폐: 1장
10000원 지폐: 1장
5000원 지폐: 1장
1000원 지폐: 2장
50000원 지폐: 2장
10000원 지폐: 2장
5000원 지폐: 0장
1000원 지폐: 2장
'교육 > [Codeit] 프로그래밍 기초 in Python' 카테고리의 다른 글
if문 개념, 문법 / elif문 / 학점계산기 실습문제 (0) | 2020.11.10 |
---|---|
while 반복문 (0) | 2020.11.10 |
짝수? 홀수? 실습과제 (0) | 2020.11.10 |
파이썬 스타일 가이드(PEP 8) (0) | 2020.11.08 |
스타일 (0) | 2020.11.08 |