[Refresh ! 코딩 테스트 / js] -다단계 칫솔 판매

정대만·2025년 2월 14일

문제해석

young이 1200 원을 벌었다고 가정하면 수고비 10%을 부모한테 주는 형식
부모도 자식한테 수고비를 받았다면 부모의부모에게도 수고비를 주는 형식이다.
center 값도 구하는줄 알고 .. obj의 key 값에 center 값도 넣었지만 무용지물.ㅎㅎ... 그래도 정답은 맞았다.

  • object 형식으로 만든이유는 key 값으로 빨리 찾으려고 + [부모 , 현재 모은돈] 이런형식으로 values 값을 주려고 설정하였다.
  • bfs / dfs 문제는 아니고 그냥 재귀 문제이다.
  • 정답률이 좀 44% 여서 낮긴한데... 카카오 문제가 더 어려운거 같다..

나의 풀이

function solution(enroll, referral, seller, amount) {
 // 찾기 쉬울려고 object 형식으로 만든다고 가정하고 건설
    let obj={"-":0};
    for(var i=0; i<enroll.length; i++){
       obj[enroll[i]]=[referral[i],0];
    }
    
    const find_final_seller= function(arr,money){
      if(arr=='-'){
          obj[arr]+=money;
          return;
      }
         //10% 는 referral 에게 제공 나는 나머지 90% 
        // 이때 10%가 1보다 작은경우에는 그냥 0을 referral 주는거니까 안가도됨.
        let your_money= Math.floor(money*0.1);
        let my_money= money-your_money;
              obj[arr][1]+=my_money
        if(your_money>=1){
         
            //돈주고 내돈도 갱신
            find_final_seller(obj[arr][0],your_money)
        }
        
    }
    
    for(var ii=0; ii<seller.length; ii++){
        //여기서부터 돈계산인데 우리가 결국 찾는놈은 대빵 '-'얘가 나오면 끝나는 코드 작성
        find_final_seller(seller[ii],amount[ii]*100)
       
    }
    let answer= Object.values(obj).slice(1)
    
     return answer.map((el)=>el[1])
    
}

남의풀이

function solution(enroll, referral, seller, amount) {
    const members = new Map();
    enroll.forEach((member, i) => {
        members.set(member, { referral: referral[i], profit: 0 });
    });
    seller.forEach((member, i) => {
        let curAmount = amount[i] * 100;
        let curMember = members.get(member);
        while (curAmount && curMember) {
            div = Math.floor(curAmount / 10);
            curMember.profit += curAmount - div;
            curAmount = div;
            curMember = members.get(curMember.referral);
       } 
    });
    return enroll.map(member => members.get(member).profit);
}
  • 나처럼 center 값을 준게 아니라 referral 값이 member 에 있는지 확인하는 while 문으로 풀었다.
  • 나보다 훨씬 깔금하다...
profile
안녕하세요

0개의 댓글