Patrick's Devlog

[SWEA/C++] 쉬운 거스름돈(1970번) 본문

Study/Algorithms Practice

[SWEA/C++] 쉬운 거스름돈(1970번)

Patrick_ 2022. 8. 22. 15:19

1. 개요

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PsIl6AXIDFAUq 

 

SW Expert Academy

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

swexpertacademy.com

※ 본 문제는 SW Expert 아카데미의 문제이므로 무단으로 복제 X

1-1. 설명

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

한 마켓에서 사용하는 돈의 종류는 50,000원 / 10,000원 / 5,000원 / 1,000원 / 500원 / 100원 / 50원 / 10원 이다. 

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

1-2. 제한 사항

 - N은 10이상 1,000,000이하의 자연수

 - N의 마지막 자리수는 항상 0


2. 구현

2-1. 풀이

돈의 종류 배열을 내림차순으로 생성한 후, 반복문을 통해 차례대로 빼주었다. 

2-2. 코드

#include <iostream>
using namespace std;

constexpr size_t MAX_NODE = 10001;
int moneys[8] = {50000, 10000, 5000, 1000, 500, 100, 50, 10};

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int T, totalMoney;
    cin >> T;
    for (int test_case = 1; test_case <= T; ++test_case) {
        int moneyCount[8] = { 0 };
        int index = 0;
        cin >> totalMoney;
        while (1) {
            if (totalMoney >= moneys[index]) {
                totalMoney -= moneys[index];
                moneyCount[index]++;
            }
            else if (totalMoney < moneys[index]) index += 1;

            if (totalMoney <= 0) break;
        }
        cout << '#' << test_case << "\n";
        for (int i = 0; i < 8; i++) {
            cout << moneyCount[i] << ' ';
        }
        cout << "\n";
    }
}