📖 문제

level3 다단계 칫솔 판매

✏️ 나의 풀이

const answer = {};
const group = {};
for(let i = 0; i<enroll.length; i++){
    group[enroll[i]] = referral[i];
    answer[enroll[i]] = 0;
}

answer는 정답을 담은 객체로 이 후 배열로 바꿔 제출해준다.

group은 추천인과 추천받은 사람을 담은 객체로 key는 추천받은 사람, value는 추천한 사람이다.

const dfs = (name, amount) =>{
    if(name === '-') return;
    const part = Math.floor(amount * 0.1);
    
    answer[name] += amount - part;
    
    if(part) dfs(group[name], part);
}

dfs의 매개변수로 name과 amount를 받는다.

name은 판매한 사람, amount는 판매금이다.

만일 name이 -일 경우 추천해준 사람이 없으므로 바로 return한다.

part는 판매금의 10프로로 판매한사람은 전체 판매금의 part를 뺀 값을 answer에 저장한다.

이후 10프로는 추천인이 가지게 되므로 dfs함수를 재귀함수로 실행시켜 name에 추천인, amount는 10프로 금액이다.

만일 part가 1미만일 경우 더이상 배당금이 없는것이므로 더이상 재귀함수를 실행시키지 않는다.

👩‍💻 코드

function solution(enroll, referral, seller, amount) {
    const answer = {};
    const group = {};
    for(let i = 0; i<enroll.length; i++){
        group[enroll[i]] = referral[i];
        answer[enroll[i]] = 0;
    }
        
    const dfs = (name, amount) =>{
        if(name === '-') return;
        const part = Math.floor(amount * 0.1);
        
        answer[name] += amount - part;
        
        if(part) dfs(group[name], part);
    }
    
    for(let i = 0; i<seller.length; i++){
        dfs(seller[i], amount[i] * 100)
    }
    return Object.values(answer);
}

댓글남기기