코테

백준 2720번 세탁소 사장 동혁 (C++)

hhzn 2025. 3. 21. 08:15

https://www.acmicpc.net/problem/2720

 

<일반 수학 1> 단계의 3번째 문제이다.

2025.03.19 - [코테] - 백준 2745번 진법 변환 (C++)

2025.03.20 - [코테] - 백준 11005번 진법 변환 2 (C++)

1번째와 2번째 문제는 여기서 볼 수 있다. 

 


이번 문제는 거스름 돈의 동전 개수를 최소한으로 구하는 문제이다.

 

 

거스름돈 실수는 정말 하면 안된다. 아르바이트의 기본이다. 그런데 리암은 그렇지 않았다.

사실 요즘 포스기는 워낙 기능이 많아서 이런거 이미 구현되어 있을 것이다. 
내가 일하고 있는 매장도 손님이 지불한 금액(지폐 등)을 입력하면 거스름돈 얼마 주어야 하는지 나온다.
(물론 오백원 동전 몇개, 백원 동전 몇개.. 이런식으로 나오진 않고 그냥 거스름돈의 총량만 나오고,
그러면 뇌가 알아서 최소한의 동전을 준다. 내가 동혁이면 리암이 해고했다.)

암튼 뇌가 알아서 해주는 일을 알고리즘 화 해보자.

 


#include <iostream>
#include <vector>

using namespace std;

int main()
{
	int T;
	cin >> T;

	vector<int> v;

	int C;

	for (int i = 0; i < T; ++i) {
		cin >> C;
		v.push_back(C);
	}

	for (int& elem : v) {
		cout << elem / 25 << ' ';
		elem = elem % 25;

		cout << elem / 10 << ' ';
		elem = elem % 10;

		cout << elem / 5 << ' ';
		elem = elem % 5;

		cout << elem << ' ' << endl;
	}
	
}

아무래도 뇌에서도 알아서 하는데, 코드라고 해서 복잡할거 없다.

 

 

테스트 케이스의 개수만큼 vector에 push_back 을 해준다. 

입력으로 들어오는 값은 센트의 단위로 들어온다. 1달러는 100센트. 즉 0.01달러는 1센트.

 

 

입력이 끝났다면 for 로 계산해야 하는 거스름돈을 순회한다. 

순회하면서 바로바로 필요한 동전들의 개수를 출력한다.

출력으로 쿼터, 다임, 니켈, 페니의 개수를 공백으로 구분해서 출력해야 한다.
(각 동전의 값은 순서대로 $0.25, $0.10, $0.05, $0.01 이다.)

 

 

 

거스름돈을 가장 큰 단위의 동전부터 나눠서 몫을 출력하고 나머지를 새로운 거스름돈으로 갱신한다.

이 작업을 쿼터부터 페니까지 순서대로 수행하면 된다. 

아래의 코드가 해당 부분이다.

		cout << elem / 25 << ' ';
		elem = elem % 25;

		cout << elem / 10 << ' ';
		elem = elem % 10;

		cout << elem / 5 << ' ';
		elem = elem % 5;

		cout << elem << ' ' << endl;

 

맨 마지막 페니의 개수를 출력하고 공백을 출력하지 않아도 된다. endl만 출력해도 된다.

 


마치며..

 

 

간단한 문제라서 치명적인 실수 (틀릴 정도의 실수)는 하지 않았다.

 

 

그런데, 문제를 풀면서 페니랑 센트가 같은 거 아닌가? 싶었다.

궁금해서 찾아보니 센트와 페니의 차이가 있었다. 
센트는 확실한 단위이고 페니는 짤짤이같은 개념인 것 같다. 

(미국에 살아본 적이 없어서.. 의미가 와닿지는 않는다.)

 

 

이번 글 따라 뻘소리가 많았는데 이만 말 줄이며.. 바잉바

 


 

** 오류 지적은 환영입니다. ^^ **