본문 바로가기

ProgramSoliving

프로그래머스 : 다단계 칫솔 판매 (JavaScript)

반응형

HashMap으로 판매자들을 number 로 변경, 그 후 배열로 부모 관계 데이터 표현

DFS 상위에 판매결과값 전달.

const hash = new Map();
var edge;
var answer;

const DFS = (num, money)=> {
    const next = edge[num];
    
    const nextMoney = Math.floor(money * 0.1);
    const currentMoeny = money - nextMoney;
    answer[num] += currentMoeny;
    
    if(next !== null && nextMoney!== 0)
        DFS(next, nextMoney);
    
}

function solution(enroll, referral, seller, amount) {
    const len = enroll.length;
    
    for(let i=0;i<len;i++) {
        hash.set(enroll[i], i);
    }
    
    edge = Array(len);
    
    for(let i=0;i<len;i++) {
        const ref = referral[i];
        
        if(ref === '-'){
            edge[i] = null;
            continue;   
        }
        
        const num = hash.get(ref);
        edge[i] = num;
    }
    
    answer = Array(len).fill(0);
    
    const sellerCnt = seller.length;
    
    for(let i=0; i< sellerCnt; i++) {
        const sellerNum = hash.get(seller[i]);
        const money = amount[i] * 100;
        
        // 가격 계산 DFS
        DFS(sellerNum, money);
    }
    
    return answer;
}
반응형