DFS를 통해서 해결한 문제 입니다.
트리를 만들어서 한번의 시행마다 curNode가 받아야 할 돈을 더하여 줍니다.
function solution(enroll, referral, seller, amount) {
var answer = [];
const tree = makeTree(enroll, referral)
const dfs = (curNode , price) => {
//종료조건
if(curNode === "-"){
// curNode에 돈 계산
return
}
const nextPrice = Math.floor(price * 0.1);
tree[curNode].price += price - nextPrice;
const parentNode = tree[curNode].parent
//다음조건
if(nextPrice >=1)dfs(parentNode , nextPrice)
}
for(let i=0; i < seller.length; i++){
dfs(seller[i], amount[i]*100)
}
for(let val in tree){
answer.push(tree[val].price)
}
return answer;
}
function makeTree(enroll, referral){
const tree = {}
for(let i=0; i<enroll.length; i++){
tree[enroll[i]] = {
parent : referral[i],
price : 0
}
}
return tree;
}