본문 바로가기
프로그램

[파이썬] 문제 : 입력 받은 돈을 동전으로 바꾸기

by 오디세이99 2024. 5. 13.
728x90
반응형

def change_money(money):
    coins = [500, 100, 10, 1]        # 동전의 종류 데이터를 가진 리스트. 큰 동전부터 작은 동전 순으로
    result_dic = {}                  # 동전의 수를 가지는 결과 딕셔너리. {'500':1, '100':2..} 와 같은 구조
    for coin in coins:               # 동전 리스트에서 동전 종류 하나씩 꺼내어 사용
        while money >= coin:         # 가지고 있는 돈이 동전보다 커야 한다.
            if coin in result_dic.keys():   # 동전 종류가 딕셔너리의 키로 있으면
                result_dic[coin] += 1       # 수량을 1 증가
            else:                           # 동전 종류가 딕셔너리의 키로 없으면
                result_dic[coin] = 1        # 새로운 요소(동전 종류)로 만들고 값은 1로 함
            money -= coin                   # 빠진 동전만큼 돈에서 뺌
    return result_dic                # 결과 딕셔너리를 동려줌

money = int(input("돈을 입력하세요: "))      # 돈 입력 받기. 문자열이기 때문에 int()로 정수로 변환

result = change_money(money)                # 변환 함수 실행하여 결과를 받음

print(f"{money}은 ",end='')                 # 입력 받은 동 출력. end='' 조건은 출력시 줄바꿈을 하지 않음. 한줄에 결과를 출력하기 위함  
for i, (k, v) in enumerate(result.items()): # 딕셔너리의 items()는 키와 값을 돌려 줌.  enumerate()는 순서와 값을 받음 수 있음. 여기서는 i는 순서, (k, v)는 딕셔너리의 키와 값이 됨
    print(f"{k}원 {v}개",end='')            # k는 동전 종류, v는 동전수량이 됨. 줄바꿈을 하지 않음
    if i < len(result)-1:                   # 딕셔너리의 마지막이 아니면 , 를 표시해줌
        print(', ',end='')
print()                                     # 마지막 줄바꿈 해줌

728x90
반응형

댓글