이 문제에서는 총 금액(totalPrice)과 가방 속 1루피(1 Rs), 50파이사(50 paise), 25파이사(25 paise) 동전의 비율을 나타내는 네 개의 숫자가 주어집니다. 우리의 목표는 C++에서 주어진 비율로부터 각 종류의 동전 개수를 구하는 프로그램을 작성하는 것입니다.
문제 설명 − 가방에 담긴 1루피, 50파이사, 25파이사 동전들을 사용하여 주어진 총액과 정확히 일치하는 합계를 만들어야 하며, 이때 각 동전이 몇 개씩 필요한지 계산해야 합니다.
예시를 통해 문제를 이해해 보겠습니다.
입력
TotalPrice = 225, 1Rs = 2, 50P = 3, 25P = 4
출력
1루피 동전 = 100개
50파이사 동전 = 150개
25파이사 동전 = 200개
설명
주어진 비율을 고려하면, 각 동전 그룹이 전체 금액에서 차지하는 가치는 다음과 같습니다.
1루피 동전: 2X,
50파이사 동전: 1.5X,
25파이사 동전: 1X,
모든 값을 더하면 총액 225와 같아집니다.
2X + 1.5X + 1X = 225
4.5X = 225 => X = 225 / 4.5 = 50
따라서 각 동전의 가치와 개수는 다음과 같습니다.
- 1루피 동전의 총 가치 = 100, 개수 = 100개
- 50파이사 동전의 총 가치 = 75, 개수 = 150개
- 25파이사 동전의 총 가치 = 50, 개수 = 200개
해결 접근 방법
위 설명에서 볼 수 있듯이, 먼저 각 동전 그룹이 전체 합계에 기여하는 금액을 구한 뒤, 그 금액을 바탕으로 실제 동전 개수를 계산합니다. 비율이 2 : 3 : 4이므로 동전 개수는 다음과 같이 표현할 수 있습니다.
- 1루피 동전: 2X개
- 50파이사 동전: 3X개
- 25파이사 동전: 4X개
X의 값은 총액을 각 그룹의 단위 가치 합으로 나누어 구할 수 있으며, 이 방식의 시간 복잡도는 O(1)로 매우 효율적입니다.
솔루션의 동작을 보여주는 프로그램은 다음과 같습니다.
예제 코드
#include <iostream>
using namespace std;
int CalcCoinValue(int totalPrice, int re1, int p50, int p25) {
float val1Coin = (re1 * 1.0), val50pCoin = (p50/2.0), val25pCoin =(p25/4.0);
int result = totalPrice / (val1Coin + val50pCoin + val25pCoin);
return result;
}
int main() {
int totalPrice = 225;
int re1 = 2, p50 = 3, p25 = 4;
int coinValue = CalcCoinValue(totalPrice, re1, p50, p25);
cout<<"Count of 1 rupee coin = " <<(coinValue * re1)<<endl;
cout<<"Count of 50 paise coin = " <<(coinValue * p50)<<endl;
cout<<"Count of 25 paise coin = " <<(coinValue * p25)<<endl;
return 0;
}
출력
Count of 1 rupee coin = 100
Count of 50 paise coin = 150
Count of 25 paise coin = 200
코드 설명
CalcCoinValue() 함수는 각 동전 그룹의 단위 가치를 계산합니다. 1루피 동전은 개당 1루피, 50파이사 동전은 개당 0.5루피(p50/2.0), 25파이사 동전은 개당 0.25루피(p25/4.0)의 가치를 가집니다. 이 단위 가치들의 합으로 총액을 나누면 공통 배수 X를 구할 수 있고, main() 함수에서는 X에 각 비율 값을 곱하여 최종 동전 개수를 출력합니다.