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

BinaryHyeok·2023년 10월 26일
0

Algorithm

목록 보기
12/25

다단계 칫솔 판매

풀이

추천인을 계속해서 찾아나가야되므로, 빠르게 찾을 수 있는 map을 사용하였다.
key값으로 자신의 이름, value로 클래스를 하나 만들어서 추천인 이름과, 자신의 이익을 기록하였다.

코드

import java.util.*;

class Solution {
    
    class Node{
        String name, referral;
        int profit;
        
        public Node(String enroll, String referral, int profit){
            this.name = name;
            this.referral = referral;
            this.profit = profit;
        }

    }
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        Map<String, Node> groupMap = new HashMap<>();
        
        // map 정보 입력
        for(int i = 0; i < enroll.length; i++){
            String name = enroll[i];
            String ref = referral[i];
            groupMap.put(name, new Node(name, ref, 0));
        }
        
        for(int i = 0; i < seller.length; i++){
            String name = seller[i];
            int price = amount[i] * 100;
            
            // 추천인에게 10%의 이익을 준다.
            while(!"-".equals(name) && price >= 1){
                int parentProfit = price / 10;
                int myProfit = price - parentProfit;
                
                // 자기 자신의 이익을 추가
                Node node = groupMap.get(name);
                node.profit += myProfit;
                groupMap.put(name, node);
                
                // 추천인 정보로 갱신
                name = node.referral;
                price = parentProfit;
            }
        }
        
        int[] answer = new int[enroll.length];
        for(int i = 0; i < answer.length; i++){
            answer[i] = groupMap.get(enroll[i]).profit;
        }
        
        return answer;
    }
}

0개의 댓글