[프로그래머스] 다단계 칫솔판매

adultlee·2023년 6월 12일
0

프로그래머스 3단계

목록 보기
21/39

문제 링크

프로그래머스 문제

풀이

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

0개의 댓글