dfs
function dfs(map, me, total){
if (me === '-') return;
const mine = total - ((total*0.1)>>0);
map[me][1] += mine;
if (total - mine > 0)
dfs(map, map[me][0], total-mine);
}
function solution(enroll, referral, seller, amount) {
const map = {};
for (let i = 0; i < enroll.length; i+=1){
map[enroll[i]] = [referral[i], 0];
// key: 본인, value: 자신의 부모
}
for (let i = 0; i < seller.length; i+=1){
const name = seller[i];
const money = amount[i] * 100;
dfs(map, name, money);
}
const result = [];
for (const key of Object.keys(map)){
result.push(map[key][1]);
}
return result;
}
구현 방법
객체(map)는 본인의 이름을 키로 갖고, [부모의 이름, 본인이 번 금액]을 값으로 갖는다.
enroll 배열을 순회하며 map 객체를 초기화한다.
seller 배열을 순회하며 원소 값을 시작으로 루트 노드방향으로 재귀적으로 호출하는 dfs 함수를 호출한다.
이때 문제의 조건대로 번 돈의 90%는 본인의 이름에 매핑되어 있는 1차원 배열의 1번 인덱스(본인이 번 금액)에 넣고 10%를 다시 dfs 함수의 인자로 넣어 호출한다.
그리고 문제의 조건대로 부모에게 넘겨줄 금액이 0 미만일 때는 재귀호출을 하지 않는다.