REC

SWEA 1970번: 쉬운 거스름돈 (D2) - Python 풀이 본문

Algorithm

SWEA 1970번: 쉬운 거스름돈 (D2) - Python 풀이

서서리 2025. 5. 15. 19:00
SMALL

제목처럼 쉬운 문제.

문제 설명

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

우리나라 화폐 ‘원’은 금액이 높은 돈을 우선적으로 계산할 때 돈의 개수가 가장 최소가 된다.

S마켓에서 사용하는 돈의 종류는 다음과 같다.

50,000 원
10,000 원
5,000 원
1,000 원
500 원
100 원
50 원
10 원

S마켓에서 손님에게 거슬러 주어야 할 금액 N이 입력되면 돈의 최소 개수로 거슬러 주기 위하여 각 종류의 돈이 몇 개씩 필요한지 출력하라.

[예제]

N이 32850일 경우,

50,000 원 : 0개
10,000 원 : 3개
5,000 원 : 0개
1,000 원 : 2개
500 원 : 1개
100 원 : 3개
50 원 : 1개
10 원 : 0개

[제약 사항]

  1. N은 10이상 1,000,000이하의 정수이다. (10 ≤ N ≤ 1,000,000)
  2. N의 마지막 자릿수는 항상 0이다. (ex : 32850)

[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.

[출력]

각 줄은 '#t'로 시작하고, 다음줄에 각 돈의 종류마다 필요한 개수를 빈칸을 사이에 두고 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

입력

2
32850
160

input.txt

출력

#1
0 3 0 2 1 3 1 0
#2
0 0 0 0 0 1 1 1

output.txt

풀이 과정

거슬러 주어야 할 금액 N이 입력될 때, 화폐를 최소 개수로 거슬러 주기 위하여 각 종류의 돈이 몇 개씩 필요한지 출력해야 합니다.

8개의 화폐를 금액이 높은 돈으로 먼저 계산하도록 50000원을 맨앞에, 10원을 맨뒤에 배치하는 배열을 만듭니다.

현재 N과 화폐 배열의 값을 앞에서부터 하나씩 비교해서 N이 더 크거나 같으면 N 나누기 화폐의 몫이 그 화폐를 사용한 개수가 됩니다.

사용한 화폐에 따라 N의 값을 계속 업데이트 하면서 어떤 화폐를 몇 개 써야 하는지 채워가면 됩니다.

정답 코드

T = int(input())

for test_case in range(1, T + 1):
    N = int(input())
    # 금액이 높은 돈을 앞에 배치
    money = [50000, 10000, 5000, 1000, 500, 100, 50, 10]
    # 각 화폐 사용 개수
    answers = [0 for _ in range(len(money))]

    for i in range(len(money)):
        # 현재 화폐가 N 값의 일부가 될 수 있다면
        if money[i] <= N:
            # 현재 화폐 사용 개수 계산
            answers[i] = N // money[i]
            # 사용한 돈만큼 N은 감소
            N -= answers[i] * money[i]
            
    print("#%d" % test_case)
    print(*answers)

이상입니다.

LIST