
문제해석
young이 1200 원을 벌었다고 가정하면 수고비 10%을 부모한테 주는 형식
부모도 자식한테 수고비를 받았다면 부모의부모에게도 수고비를 주는 형식이다.
center 값도 구하는줄 알고 .. obj의 key 값에 center 값도 넣었지만 무용지물.ㅎㅎ... 그래도 정답은 맞았다.
나의 풀이
function solution(enroll, referral, seller, amount) {
// 찾기 쉬울려고 object 형식으로 만든다고 가정하고 건설
let obj={"-":0};
for(var i=0; i<enroll.length; i++){
obj[enroll[i]]=[referral[i],0];
}
const find_final_seller= function(arr,money){
if(arr=='-'){
obj[arr]+=money;
return;
}
//10% 는 referral 에게 제공 나는 나머지 90%
// 이때 10%가 1보다 작은경우에는 그냥 0을 referral 주는거니까 안가도됨.
let your_money= Math.floor(money*0.1);
let my_money= money-your_money;
obj[arr][1]+=my_money
if(your_money>=1){
//돈주고 내돈도 갱신
find_final_seller(obj[arr][0],your_money)
}
}
for(var ii=0; ii<seller.length; ii++){
//여기서부터 돈계산인데 우리가 결국 찾는놈은 대빵 '-'얘가 나오면 끝나는 코드 작성
find_final_seller(seller[ii],amount[ii]*100)
}
let answer= Object.values(obj).slice(1)
return answer.map((el)=>el[1])
}
남의풀이
function solution(enroll, referral, seller, amount) { const members = new Map(); enroll.forEach((member, i) => { members.set(member, { referral: referral[i], profit: 0 }); }); seller.forEach((member, i) => { let curAmount = amount[i] * 100; let curMember = members.get(member); while (curAmount && curMember) { div = Math.floor(curAmount / 10); curMember.profit += curAmount - div; curAmount = div; curMember = members.get(curMember.referral); } }); return enroll.map(member => members.get(member).profit); }
- 나처럼 center 값을 준게 아니라 referral 값이 member 에 있는지 확인하는 while 문으로 풀었다.
- 나보다 훨씬 깔금하다...