코딩테스트/SWExpertAcademy

쉬운 거스름돈 C++(SW Expert Academy)

멍토 2020. 2. 9.

난이도 : D2

문제번호 : 1970

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PsIl6AXIDFAUq&categoryId=AV5PsIl6AXIDFAUq&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

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

S마켓에서 사용하는 돈의 종류는 다음과 같다.
50,000 원
10,000 원
5,000 원
1,000 원
500 원
100 원
50 원
10 원

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

제약사항

1. N은 10이상 1,000,000이하의 정수이다. (10 ≤ N ≤ 1,000,000)

2. N의 마지막 자릿수는 항상 0이다. (ex : 32850)

입력

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

각 테스트 케이스에는 N이 주어진다.

출력

각 줄은 '#t'로 시작하고, 다음줄에 각 돈의 종류마다 필요한 개수를 빈칸을 사이에 두고 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

예시

입력 출력

32850
160 
#1
0 3 0 2 1 3 1 0
#2
0 0 0 0 0 1 1 1

2. 문제풀이

간단하게 생각하여 풀었습니다.

제일 큰액수의 돈부터 나눈 몫을 출력하고

나머지 연산을 통해 점점 작은단위의 돈을 구했습니다.


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
int main(){
    //반복길이와 돈, 한국돈을 입력
    int length, money, Kmoney[8]{5000010000500010005001005010};
    cin >> length;
    //길이만큼 반복
    for(int l = 1; l<=length; l++){
        cin >> money;
        cout << "#"<<l<<endl;
        //입력받은 돈을 제일 앞의수부터 나누어준다.
        for(int i=0; i<8; i++){
            cout << (money / Kmoney[i]) << " ";
            //나머지 연산을 통해 돈의 액수를 줄인다.
            money %= Kmoney[i];
        }
        cout << endl;
    }
    
    return 0;
}

댓글

💲 광고입니다.