입력
enroll, 추천인 vector referral
enroll, referral ≤ 10,000seller, 판매량 vector amount
seller, amount ≤ 100,000출력
구현
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(vector<string> enroll, vector<string> referral, vector<string> seller, vector<int> amount) {
vector<int> answer;
// (이름, 추천인의 이름)
map<string, string> e;
// (이름, 수익)
map<string, int> s;
for (int i = 0; i < enroll.size(); i++) {
// "-"이면
// 이름 : "-" 연결
if (referral[i] == "-") {
e[enroll[i]] = "-";
}
// 이름 : 추천인 연결
else {
e[enroll[i]] = referral[i];
}
}
for (int i = 0; i < seller.size(); i++) {
// 현재 판매액
int val = amount[i] * 100;
// 현재 판매자
string name = seller[i];
// 추천인 및 센터에 배분해야하는 금액
while (name != "-") {
// 예를 들어 jamie가 1000을 벌면
// jamie는 1000-100 => 900의 수익
// 다시 jamie의 추천인은 mary는 100-10 => 90의 수익
// 수수료
int vat = val * 0.1;
// 이번 판매로 얻은 name의 수익
s[name] += val - vat;
// 추천인
name = e[name];
val = vat;
if (vat < 1) {
break;
}
}
}
for (int i = 0; i < enroll.size(); i++) {
answer.push_back(s[enroll[i]]);
}
return answer;
}