<aside>
💬 lv0
, 그리디
라이캣은 편의점에서 1만원으로 아이스크림을 살 예정입니다. 모든 아이스크림은 7백원입니다. 아이스크림 사는 갯수에 따라 최소 갯수의 잔돈을 리스트로 출력하세요.
예를 들어, 아이스크림을 2개 산다면 1,400원이므로 8,600원의 거스름돈을 주어야 합니다. 이럴 경우 5,000원 1개, 1,000원 3개, 500원 1개, 100원 1개의 거스름돈이 나가야 합니다. 리스트로는 [0, 1, 3, 1, 1]이 출력되어야 합니다.
입력 (아이스크림 개수) | 출력 (거스름돈 리스트: [만원, 오천원, 천원, 오백원, 백원]) |
---|---|
2 | [0, 1, 3, 1, 1] |
3 | [0, 1, 2, 1, 4] |
10 | [0, 0, 3, 0, 0] |
def solution(data):
ice = [10000, 5000, 1000, 500, 100] **#1 화폐 단위 설정**
ret = [0] * 5 **#2 잔돈 계산**
cost = 10000 - data * 700
for i in range(len(ice)): **#3 화폐 단위 별 계산**
ret[i] = cost // ice[i]
cost %= ice[i]
return ret **#4 결과 반환**
화폐 단위 설정
ice
리스트에는 거스름돈을 계산할 때 사용할 화폐 단위가 내림차순으로 정렬되어 있습니다. 이를 통해 큰 단위부터 잔돈을 계산할 수 있습니다.
잔돈 계산
ret
은 각 화폐 단위별 필요한 개수를 저장할 리스트입니다. 0으로 초기화 합니다.cost
변수를 통해 구매 후 남은 잔돈을 계산합니다. 이때, 아이스크림의 개수(data
)에 따라 총 구매 금액이 달라집니다.화폐 단위 별 계산
ice
리스트에 정의된 각 돈의 단위에 대해 반복하며, 각 단위로 남은 잔돈을 나누어 해당 단위의 돈이 몇 개 필요한지(ret[i]
)와 남은 잔돈(cost
)을 계산합니다.cost //= ice[i]
각 단위의 돈으로 남은 잔돈을 나누고, 그 몫을 ret
리스트에 저장합니다. 이는 해당 단위의 돈을 몇 개 반환할 것인지를 나타냅니다.cost %= ice[i]
각 단위의 돈으로 남은 잔돈을 나눈 후의 나머지를 다시 cost
에 저장합니다. 이는 남은 잔돈을 업데이트하는 과정입니다.결과 반환
각 단위 별 반환 될 돈의 개수를 리스트로 반환합니다.
이 풀이 방법에 나오는 문법은 이전에 배운 것입니다. 어려운 부분은 없습니다.
for
반복문과 **divmod
**를 사용하는 것으로 수정도 가능합니다.
def solution(data):
charge_dic = {10000: 0, 5000: 0, 1000: 0, 500: 0, 100: 0} **#1 화폐 단위 설정**
charge = 10000 - 700 * data **#2 잔돈 계산**
if charge == 10000: **#3 아이스크림을 구매하지 않는 경우 처리**
return [1, 0, 0, 0, 0]
else: **#4 화폐 단위 별 계산**
for coin in [5000, 1000, 500, 100]:
charge_dic[coin], charge = divmod(charge, coin)
return list(charge_dic.values()) **#5 결과 반환**
화폐 단위 설정
charge_dic
잔돈을 반환할 때 사용할 각 화폐 단위(10,000원, 5,000원, 1,000원, 500원, 100원)와 그 개수를 저장하는 딕셔너리입니다. 초기 개수는 모두 0
으로 설정됩니다.
잔돈 계산
charge
사용자가 지불한 금액(10,000원)에서 구매한 아이스크림 개수(data
)에 따른 총 가격을 뺀 값을 계산하여 잔돈을 구합니다.
아이스크림을 구매하지 않는 경우 처리
문제 기준이 만원으로 아이스크림을 산다고 되어 있습니다. 아이스크림을 구매하지 않을 경우에는 계산 로직을 거치지 않고 바로 만원을 돌려줍니다.
화폐 단위 별 계산
divmod
함수를 사용하여 현재 남은 잔돈을 화폐 단위로 나누고, 그 결과로 얻은 몫(해당 화폐 단위가 필요한 개수)을 charge_dic
딕셔너리에 저장하고, 나머지(남은 잔돈)를 charge
에 업데이트합니다. 최소 개수의 잔돈을 반환해야 하기 때문에 큰 단위부터 계산을 해줍니다.
결과 반환
각 화폐 단위 별 필요 개수를 딕셔너리에서 추출하여 리스트 형태로 반환합니다.