[백준] 2720번 - 세탁소 사장 동혁 C++

문제
미국으로 유학간 동혁이는 세탁소를 운영하고 있다. 동혁이는 최근에 아르바이트로 고등학생 리암을 채용했다.
동혁이는 리암에게 실망했다.
리암은 거스름돈을 주는 것을 자꾸 실수한다.
심지어 $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. 거스름돈과 Quat,Dime,Nickel,Penny를 double로 해야할 것 같지만 입력이 124면 1.24이다. 즉 100을 곱한 값으로 입력하게 되므로 0.25 0.1 0.05 0.01을 모두 100을 곱한 정수로 초기화시킨 변수를 int형으로 선언한다.
  2. 각 갯수를 저장할 배열을 만들어준다.
  3. 이제 입력시킬 테스트 개수 T와 거스름을 입력받는다.
  4. 거스름돈이 124로 입력이 들어오면 최소갯수로 받기위해선 먼저 Quat로 나눈다. 그럼 4가 나올것이고, 다시 거스름에는 Quat로 나눈 나머지를 넣어준다.
  5. 4번을 각각 Quat Dime Nickel Penny순으로 반복한다. 그럼 각각 갯수를 저장할 배열에 할당시킨다. 이를 T만큼 반복한다.
  6. 출력하면 끝.
#include <iostream>
using namespace std;

int main(){
	int change=0; //거스름돈
	
	int Quat = 25;
	int Dime = 10;
	int Nickel = 5;
	int Penny =  1;

	int T;
	cin >> T;

	int Q, D, N, P;

	int** arr = new int* [T]; //세로길이 할당
	for (int i = 0; i < T; i++) {
		arr[i] = new int[4]; //가로길이 할당
	}


	for (int i = 0; i < T; i++) {
		cin >> change; //124입력

		Q = change / Quat; //Q에는 124를 25로 나눈 몫이 들어가면서 4가 들어감
		change = change % Quat; //여기엔 그 25로 나누고 난 후의 나머지가 들어감 즉 24들어감

		D = change / Dime; //위와 똑같이 반복
		change = change % Dime;

		N = change / Nickel;
		change = change % Nickel;

		P = change / Penny;
		change = change % Penny;

		//각 배열에 넣어준다.
		arr[i][0] = Q;
		arr[i][1] = D;
		arr[i][2] = N;
		arr[i][3] = P;
	}

	//출력
	for (int i = 0; i < T; i++) {
		for (int j = 0; j < 4; j++) {
			cout << arr[i][j] <<" ";
		}
		cout << "\n";
	}
	return 0;
}

 

결과

 

이상입니다.