본문 바로가기
개발일지/Python

Day2, 챕터3 그리디 일부. 거스름돈 알고리즘

by 개발에정착하고싶다 2022. 5. 18.
320x100

챕터3 그리디에서 알고리즘을 풀어야하는 파트는 4부분으로 나뉜다.

 

1.거스름돈

2.큰 수의 법칙

3.숫자 카드 게임

4.1이 될때까지

 

그 중에서 시간 및 체력관계상 오늘은 거스름돈 알고리즘만 풀어보고 나머지는 푸는대로 올려볼 계획이다.

 

# 나의 코드
def exchange(n):
    exchange500Cnt = 0
    exchange100Cnt = 0
    exchange50Cnt = 0
    exchange10Cnt = 0

    while n > 10:
        total = n
        if n >=500:
            exchange500Cnt += n//500
            total = n % 500
        if n >= 100:
            exchange100Cnt += total //100
            total %= 100

        if n >= 50:
            exchange50Cnt += total // 50
            total %= 50

        if n>= 10:
            exchange10Cnt += total // 10
            total %= 10

        result = (f'{n}원에 대한 거스름돈: 500원: {exchange500Cnt}개, 100원:{exchange100Cnt}개, '
              f'50원:{exchange50Cnt}개, 10원: {exchange10Cnt}개. 나머지: {total}원')
        break
    return result

x = int(input('잔돈으로 변경 원하는 금액은?: '))
print(exchange(x))

 

# 해답코드

n = 1260
count = 0

# 큰 단위의 화폐부터 차례대로 확인
coin_types = [500,100,50,10]

for coin in coin_types:
    count += n //coin
    n %= coin

print(count)
# 정말 간단하다.
# 단순히 거슬러줘야하는 동전의 갯수를 구하는 측면에서는 좋은 코드라고 볼 수 있다.
# 하지만 더 나아가서 어느 동전을 몇개를 거슬러 줘야하는지, 그 거스름의 총액은 얼마인지 구하는
# 간단한 수식은 어떨지가 너무 궁금하다.
300x250