하루에 한 문제

[프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자] 다단계 칫솔 판매 -JavaScript 본문

알고리즘/프로그래머스

[프로그래머스 2021 Dev-Matching: 웹 백엔드 개발자] 다단계 칫솔 판매 -JavaScript

dkwjdi 2021. 5. 1. 23:22

https://programmers.co.kr/learn/courses/30/lessons/77486

 

코딩테스트 연습 - 다단계 칫솔 판매

민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,

programmers.co.kr

function solution(enroll, referral, seller, amount) {
    var answer = [];
    
    let ref = new Map(); //추천인 x는  y에게 추천받았따
    let benefit = new Map(); //얻은 돈 

    for(let i=0; i<enroll.length; i++){
        ref.set(enroll[i], referral[i]);
        benefit.set(enroll[i], 0);
    }

    for(let i=0; i<seller.length; i++){
        let name = seller[i];
        let money = amount[i]*100;
        let remain = parseInt(money/10);
     
        benefit.set(seller[i], benefit.get(seller[i])+money-remain); //우선 맨 처음 사람 돈 넣어주기
        money=remain;
        
        while(true){ //추천인 돈 넣어주기 
            let refName = ref.get(name); //추천인 이름
            if((refName)=='-') break;
            remain=parseInt(money/10); //10%
            benefit.set(refName, benefit.get(refName)+money-remain);
            name=refName;
            money=remain;
        }
    }
   
     for(let i=0; i<enroll.length; i++){
        answer.push(benefit.get(enroll[i], 0));
    }
   
    return answer;
}

소요시간 : 45분

 

우선 문제를 사용할 때 map2개를 사용했습니다.

 

ref는 자신의 추천인을 담고 있는 map입니다.

benefit은 자신의 이익을 담고있는 map입니다.

 

로직을 살펴보면

 

1. 자신의 이익을 benefit에 담는다 ( 이때 이익 - 이익의 10%)를 넣어줍니다.

2. 자신의 추천인에게 (이익의10% - 이익의 10%의 10%)를 넣어줍니다.

3. 2번을 자신의 추천인이 "-"일떄까지 반복해줍니다.

 

끝~!

 

 

 

Comments