[Programmers] 다단계 칫솔 판매

Date:

[Programmers] 다단계 칫솔 판매

Problem URL : 다단계 칫솔 판매

#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;
    vector<int> parent;
    map<string, int> m;
    int size = enroll.size();
    answer.resize(size);
    parent.resize(size);
    
    for(int i = 0; i < size; i++) {
      m.insert({enroll[i], i}); // enroll의 이름(값), 인덱스 순의 map을 하나 만들어주자!
    }
    
    for(int i = 0; i < size; i++) {
      if(referral[i] == "-") {
        parent[i] = -1; // 부모가 없는 노드
      }else {
        parent[i] = m[referral[i]];
      }
    }

    for(int i = 0; i < seller.size(); i++) {
      int profit = amount[i] * 100;
      int x = m[seller[i]];
      // 최상위 노드까지 반복
      while(x != -1) { 
        int dividend = int(profit * 0.1);
        answer[x] += profit - dividend;
        profit = dividend;
        x = parent[x];
      }
    }

    return answer;
}

댓글