[ 프로그래머스 ] #77486 : 다단계 칫솔 판매 - JAVA

🔗 다단계 칫솔 판매

import java.util.Map;
import java.util.HashMap;
class Solution {
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        // 민호 : root node 
        // 이익의 10%를 부모에게 주고 나머지는 자신이 가짐, 부모는 또 부모에게 10% 줌  
        // 10% 계산시 원단위 절사, 1원 미만인 경우 분배하지 않고 자신이 가짐 

        // enroll : 각 판매원의 이름을 담은 배열, 민호의 이름은 없음 
        // referral : i 번째에 있는 이름은 배열 enroll 내에서 i 번째에 있는 판매원을 조직에 참여시킨 사람의 이름
        // seller :  i 번째 판매 집계 데이터가 어느 판매원에 의한 것인지
        // amount : i 번째에 있는 수는 i 번째 판매 집계 데이터의 판매량

        // 칫솔 1개에 100원 
        // 판매원에게 배분된 이익금의 총합을 계산해 return 

        Map<String, String> parent = new HashMap<>();

        for(int i=0;i<enroll.length;i++){
            parent.put(enroll[i],referral[i]);
        }

        // key : 판매자 , val : 판매량
        Map<String, Integer> total=new HashMap<>();
        for(int i=0 ; i<seller.length;i++){
            String curName= seller[i];
            int money=amount[i]*100;

            // money가 0보다 크고 root 가 아닐때 까지 반복
            while(money>0 && !curName.equals("-")){
                // 90%를 판매자가 가짐
                total.put(curName,total.getOrDefault(curName,0)+money-(money/ 10));
                // 판매자의 부모를 새로운 부모로
                curName=parent.get(curName);
                // 10%의 돈은 나눠줌
                money/=10;
            }

        }

        int []answer=new int[enroll.length];
        for(int i=0;i<enroll.length;i++){
            answer[i]=total.getOrDefault(enroll[i],0);
        }
        return answer;     
    } 
}