TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 기초>

[파이썬] 파이썬 기초 - 동전 개수 구하기

by 기록자_Recordian 2025. 1. 14.
728x90
반응형
복합 할당 연산자

 

[복합 할당 연산자]

  • += : 값을 더하고 할당 > a += b 는 a = a + b
  • -= : 값을 빼고 할당
  • *= : 값을 곱하고 할당
  • /= : 값을 나누고 할당
  • //=: 값을 정수 나누기하고 할당
  • %= : 나머지를 구하고 할당
  • **= : 지수 연산 후 할당

문제

 

교환할 돈을 입력받아 500원, 100원, 50원, 10원의 갯수를 계산해서 출력

출력 예시: 교환할 돈을 입력하세요 >>> 3772

500원 짜리 ==> 7개

100원 짜리 ==> 2개

50원 짜리 ==> 1개

10원 짜리 ==> 2개

교환하지 못하는 돈 ==> 2원


풀이1

 

# 문제 풀이1

money = int(input("교환할 돈을 입력하세요 >>> "))

# money = 3772
print("현재 잔액:", money)

m_500 = money // 500 # 7개
mm_500 = 500 * m_500
money -= mm_500
print("잔액:", money)

m_100 = money // 100
mm_100 = 100 * m_100
money -= mm_100
print("잔액:", money)

m_50 = money // 50
mm_50 = 50 * m_50
money -= mm_50
print("잔액:", money)

m_10 = money // 10
mm_10 = 10 * m_10
money -= mm_10
print("잔액:", money)

m_non = money // 1

print("500원 짜리 ==> {0} 개".format(m_500))
print("100원 짜리 ==> {0} 개".format(m_100))
print("50원 짜리 ==> {0} 개".format(m_50))
print("10원 짜리 ==> {0} 개".format(m_10))
print("교환하지 못하는 돈 ==> {0} 개".format(m_non))

▶ 답이 잘 나오긴 하나, 코드가 너무 길어 줄일 필요가 있어 보인다.


풀이2

 

# 문제 풀이2

money = int(input("교환할 돈을 입력하세요 >>> "))

# money = 3772
print("현재 잔액:", money)

m_500 = money // 500 # 7개
mm_500 = 500 * m_500
money -= mm_500
print("잔액:", money)

m_100 = (money // 100) * 100
money -= m_100
print("잔액:", money)

m_50 = (money // 50) * 50
money -= m_50
print("잔액:", money)

m_10 = (money // 10) * 10
money -= m_10
print("잔액:", money)

m_non = money // 1

print("500원 짜리 ==> {0} 개".format(m_500))
print("100원 짜리 ==> {0} 개".format(int(m_100 / 100)))
print("50원 짜리 ==> {0} 개".format(int(m_50 / 50)))
print("10원 짜리 ==> {0} 개".format(int(m_10 / 10)))
print("교환하지 못하는 돈 ==> {0} 개".format(m_non))

▶ 기존의 코드 중 동전과 동전의 개수를 곱하여 출력되는 값을 표현하는 부분을 줄여서 보다 간결하게 하였으나, 여전히 길고 비효율적으로 보인다.


풀이3

 

# 문제풀이 3
money = int(input("교환할 돈을 입력하세요 >>> "))

# 남은 돈 출력
print("현재 잔액:", money)

# 동전 종류
coin_types = [500, 100, 50, 10]

# 각 화폐 단위 별로 개수 계산
currency_count = {}

for coin_type in coin_types:
    count = money // coin_type
    currency_count[coin_type] = count
    money -= count * coin_type
    print("잔액:", money)

# 남은 돈은 모두 1원으로 계산
m_non = money

# 결과 출력
for coin_type in coin_types:
    print("{0}원 짜리 ==> {1} 개".format(coin_type, currency_count[coin_type]))

print("교환하지 못하는 돈 ==> {0} 개".format(m_non))

  • coin_types 라는 리스트를 만들고,  for 문을 사용하여 반복하여 결과를 출력하도록 하였다.
  • count: 금액을 coin_type으로 나눈 후 몫만 반환
  • currency_count[coin_type] = count: 동전 개수 내에 coin_types 리스트 내의 값들이 순환하여 들어가며 count 변수에 입력된다.
  • money -= count * coin_type: 금액은 count 변수와 coin_type 값을 곱한 값이 차감된다. (반복문 실행 시마다 계속 차감)
  • 결과 출력 시에도 for 반복문을 사용하여 효율적으로 코드를 작성하였다.

선생님 답

 

선생님의 답은 생각보다 너무너무 간단했다. 스스로 기초가 많이 부족하다 느꼈다.

# 거스름돈 개수
money = int(input("교환할 돈을 입력하세요 >>> "))

# 변수 선언
c500 =0
c100 = 0
c50 = 0
c10 = 0

c500 = money // 500
money %= 500

c100 = money // 100
money %= 100

c50 = money // 50
money %= 50

c10 = money // 10
money %= 10

print("500원 짜리 ==> {0} 개".format(c500))
print("100원 짜리 ==> {0} 개".format(c100))
print("50원 짜리 ==> {0} 개".format(c50))
print("10원 짜리 ==> {0} 개".format(c10))
print("교환하지 못하는 돈 ==> {0} 개".format(money))

 

728x90
반응형