문제

미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다.

동혁이는 리암에게 실망했다.

리암은 거스름돈을 주는 것을 자꾸 실수한다.

심지어 $0.5달러를 줘야하는 경우에 거스름돈으로 $5달러를 주는것이다!

어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다.

거스름돈의 액수가 주어지면 리암이 줘야할 쿼터(Quarter, $0.25)의 개수, 다임(Dime, $0.10)의 개수, 니켈(Nickel, $0.05)의 개수, 페니(Penny, $0.01)의 개수를 구하는 프로그램을 작성하시오. 거스름돈은 항상 $5.00 이하이고, 손님이 받는 동전의 개수를 최소로 하려고 한다. 예를 들어, $1.24를 거슬러 주어야 한다면, 손님은 4쿼터, 2다임, 0니켈, 4페니를 받게 된다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 거스름돈 C를 나타내는 정수 하나로 이루어져 있다. C의 단위는 센트이다. (1달러 = 100센트) (1<=C<=500)

출력

각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다.

예제 입력 1 복사

3
124
25
194

예제 출력 1 복사

4 2 0 4
1 0 0 0
7 1 1 4

 

 

내가 만든  정답 코드

T = int(input())
Q = 25
D = 10
N = 5
P = 1

Q_list = []
D_list = []
N_list = []
P_list = []

for i in range(T):
    C = int(input())
    Quarter = C // Q
    Dime = (C - Quarter * Q) // D
    Nickel = (C - Quarter * Q - Dime * D) // N
    Penny = (C - Quarter * Q - Dime * D - Nickel * N) // P
    Q_list.append(Quarter)
    D_list.append(Dime)
    N_list.append(Nickel)
    P_list.append(Penny)

for i in range(T):
    print(f"{Q_list[i]} {D_list[i]} {N_list[i]} {P_list[i]}")

 

 

다른 사람들의 코드 

n = int(input())

for _ in range(n):
	money = int(input())
	for i in [25, 10, 5, 1]:
		print(money//i, end=' ')
		money = money%i

 

 

다른 사람들이 쓴 코드는 내가 일일이 복잡하게 모든 걸 쓴 코드에 비해 훨씬 간결하다.

여기서 보면 나는 25,10,5,1을 처음에 변수를 통해 설정해준 반면에 여기서는 리스트를 통해 반복문을 돌게 하여 나누도록 하였다. 내가 124에서 100을 빼고 20을 빼고 하는 식으로 코드를 짰는데 굳이 이렇게 안하고 124를 25로 나누고 10으로 나누고 각각 한 몫을 구해서 출력하도록 했으면 더 좋았을 것 같다. 

 

 

사람들 말로는 이 문제가 전형적인 그리드 문제라고 한다. 

그리드가 뭔지 몰라서 나는 찾아봤다. 

 

그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자"라는 모토를 가지는 알고리즘 설계 기법이다.[1]

 

그리디 알고리즘 - 나무위키

그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자"라는 모토를 가지는 알고리즘 설계 기법이다.[1] 예를 들

namu.wiki

 

이거 보면서 생각난게 머신러닝의 가지치기 기법인데 혹시 연관이 있나 싶다. 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 2292  (0) 2024.01.30
백준 파이썬 - 2903  (1) 2024.01.30
백준 파이썬 - 2745  (1) 2024.01.29
백준 파이썬 - 2563  (0) 2024.01.24
백준 파이썬 - 10798  (0) 2024.01.19

+ Recent posts