문제 이해

입력

출력


문제 풀이


  1. 구현

    #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;
    }