여러 사람이 투자한 금액을 담은 배열과, 각 사람별로 돈을 투자한 기간을 담은 배열이 주어졌을 때 이익 공유 비율(profit sharing ratio)을 계산하는 것이 이 프로그램의 목표입니다.
이익 공유 비율이란?
합자회사(partnership firm)에서는 이익과 손실을 각 파트너가 사업에 투자한 자본 규모에 따라 분배합니다. 이 자본 투자 비중을 기준으로 계산한 것이 바로 이익 공유 비율이며, 사업에서 발생한 이익을 각 파트너에게 얼마씩 지급할지를 나타내는 지표입니다.
공식 −
파트너 1 = 투자 자본 × 투자 기간
파트너 2 = 투자 자본 × 투자 기간
…
파트너 n = 투자 자본 × 투자 기간
이익 공유 비율 = 파트너 1 : 파트너 2 : 파트너 3 : … : 파트너 n
예시
입력 -: amount[] = { 1000, 2000, 2000 }
time[] = { 2, 3, 4 }
출력 -: 이익 공유 비율 1 : 3 : 4
입력 -: amount[] = { 5000, 6000, 1000 }
time[] = { 6, 6, 12 }
출력 -: 이익 공유 비율 5 : 6 : 2
문제 해결 접근 방법
- 여러 파트너가 투자한 자본을 담은 배열과, 각 파트너의 투자 기간을 담은 배열을 입력으로 받습니다.
- 각 파트너의 자본에 해당 투자 기간을 곱하고, 이 연산을 모든 파트너에 대해 반복합니다.
- 곱셈 결과로 얻은 값들의 최대공약수(GCD)를 구해 약분함으로써 가장 단순한 형태의 비율을 계산합니다.
- 최종 비율을 화면에 출력합니다.
알고리즘
시작
단계 1 -> 최대공약수(GCD)를 계산하는 함수 선언
int GCD(int arr[], int size)
int i 선언
int result = arr[0] 선언
반복(i = 1; i < size; i++)
result = __gcd(arr[i], result)
반복 종료
result 반환
단계 2 -> 이익 공유 비율을 계산하는 함수 선언
void cal_ratio(int amount[], int time[], int size)
int i, arr[size] 선언
반복(i = 0; i < size; i++)
arr[i] = amount[i] * time[i]
반복 종료
int ratio = GCD(arr, size) 선언
반복(i = 0; i < size - 1; i++)
arr[i] / ratio 출력
반복 종료
마지막 값 arr[i] / ratio 출력
단계 3 -> main() 함수
int amount[] = { 1000, 2000, 2000 } 선언
int time[] = { 2, 3, 4 } 선언
int size = sizeof(amount) / sizeof(amount[0]) 계산
cal_ratio(amount, time, size) 호출
종료
C++ 코드 구현
#include <bits/stdc++.h>
using namespace std;
// 최대공약수(GCD) 계산
int GCD(int arr[], int size) {
int i;
int result = arr[0];
for (i = 1; i < size; i++)
result = __gcd(arr[i], result);
return result;
}
// 이익 공유 비율 계산
void cal_ratio(int amount[], int time[], int size) {
int i, arr[size];
for (i = 0; i < size; i++)
arr[i] = amount[i] * time[i];
int ratio = GCD(arr, size);
for (i = 0; i < size - 1; i++)
cout << arr[i] / ratio << " : ";
cout << arr[i] / ratio;
}
int main() {
int amount[] = { 1000, 2000, 2000 };
int time[] = { 2, 3, 4 };
int size = sizeof(amount) / sizeof(amount[0]);
cout << "profit sharing ratio ";
cal_ratio(amount, time, size);
return 0;
}
출력 결과
profit sharing ratio 1 : 3 : 4
동작 원리 살펴보기
위 예제에서 각 파트너의 투자 금액과 투자 기간을 곱하면 다음과 같습니다.
- 파트너 1: 1000 × 2 = 2000
- 파트너 2: 2000 × 3 = 6000
- 파트너 3: 2000 × 4 = 8000
이 세 값의 최대공약수는 2000이므로, 각 값을 2000으로 나누면 1 : 3 : 4라는 가장 단순한 형태의 이익 공유 비율이 도출됩니다. 예를 들어 총 이익이 8이라면 파트너 1은 1, 파트너 2는 3, 파트너 3은 4만큼 배분받게 됩니다. 참고로 원문 코드에는 int time[] = { 2, 3, 4 } 뒤에 세미콜론이 누락되어 있어 컴파일 오류가 발생할 수 있으므로, 위 코드에는 이를 바로잡아 반영했습니다.