[프로그래머스] Lv3. 다단계 칫솔 판매- JavaScript

이상돈·2023년 7월 26일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 3

출처 : 프로그래머스 - 다단계 칫솔 판매

문제

제한사항

📌 내가 생각한 풀이

이중객체를 만들어 탐색시간을 O(1)로 만들자(Hash map 사용)
  1. 부모노드가 존재하면 판매액의 10%를 주고 자신은 90%를 갖는다.(총 금액 - Math.floor(판매액*0.1)
  2. 부모노드가 존재하지 않으면 프로그램 종료
  3. 만약 금액의 10%가 1원 미만이면 부모노드에게 돈을 주지 않고 자신이 총액을 가지고 프로그램 종료
function solution(enroll, referral, seller, amount) {
    var answer = [];
    let tree = {
        'minho':{
            parent : 'none',
            money : 0
        }
    }
   
    for(var i =0; i<enroll.length; i++){
        let obj = {
            parent : referral[i] === '-' ? 'minho' : referral[i],
            money : 0
        }
        tree[enroll[i]] = obj 
    }
    for(var j =0; j<seller.length; j++){
        let sellerName = seller[j];
        let price = amount[j]*100;
        while(sellerName !== 'minho'){
            let parent = tree[sellerName].parent;
            let forParent = Math.floor(price*0.1);
            if(forParent < 1){
                tree[sellerName].money += price
                break;
            }else{
                tree[sellerName].money += price-forParent;
                sellerName = parent
                price = forParent
            }
        }
    }
    enroll.forEach((data,idx)=>answer.push(tree[data].money))
    return answer;
}

📌 느낀점

테스트케이스 11, 12, 13 번의 입력값이 매우 많다는 것을 깨닫고 찾는 값을 O(1)에 찾도록 이중객체를 사용하여 Hash map을 이용하여 구현하였다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글