티스토리 뷰

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

 

🐢 설명

HashMap을 이용하여 풀었다.

 

자신의 상위 보스를 추적해서 이익의 10%를 분배해줘야 하면서 나머지 90%는 자신의 수익을 챙기는 구조이다. 따라서 모든 판매자들에 대해서 부모를 등록시키고 돈을 벌고 수익을 일부분을 부모에게 전달시켜 준다.

 

이때 10원 미만은 절삭해야하고, root에 도달하면 따로 돈을 적금안해줘도 되므로 return 한다.

 

makeTree()에서 myBoss에는 자신 - 자신의 부모 를 등록하고, myCount에는 자신 - 자신의 계좌를 등록한다.

selling()에서 수익을 벌면 90%는 자신에게 더하고, 10%는 상위 노드에게 분배한다.

distribute()에서 10원 미만이 되거나 || root라면 종료한다. 그게 아니라면 계속 반복해서 수익 획득 & 분배한다.

 

🐢코드
import java.util.*;

class Solution {
    static HashMap<String, String> myBoss = new HashMap<>();
    static HashMap<String, Integer> myCount = new HashMap<>();
    
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        
        makeTree(enroll, referral);
        selling(seller, amount);
        
        int i = 0;
        int[] answer = new int[enroll.length];
        for (String name : enroll) {
            answer[i++] = myCount.get(name);
        }
        return answer;
    }
    
    private static void selling(String[] seller, int[] counts)
    {
        for (int i = 0; i < seller.length; i++)
        {
            String name = seller[i];
            int cnt = counts[i];
            
            distribute(name, 100 * cnt);
        }
    }
    
    private static void distribute(String name, int money)
    {
        if (name.equals("root")) return;
        
        if (money >= 10)
        {
            int payMoney = money / 10;
            int myMoney = money - payMoney;
            int currentMoney = myCount.get(name);
            
            myCount.put(name, currentMoney + myMoney);
            distribute(myBoss.get(name), payMoney);
        } else {
            int currentMoney = myCount.get(name);
            myCount.put(name, currentMoney + money);
        }
    }
    
    private static void makeTree(String[] enroll, String[] refer)
    {
        for (int i = 0; i < enroll.length; i++)
        {
            String me = enroll[i];
            String boss = refer[i];
            
            if (boss.equals("-")) {
                myBoss.put(me, "root");
                myCount.put(me, 0);
            } else {
                myBoss.put(me, boss);
                myCount.put(me, 0);
            }
        }
    }
}
🐢 마무리
반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday