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

밀루·2024년 7월 10일
0

백준 문제풀이

목록 보기
51/51
post-thumbnail

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

import java.util.*;
class Solution {
    public static HashMap<String, String> parent = new HashMap<String, String>();
    // key node - value parent
    public static HashMap<String, Integer> money = new HashMap<String, Integer>();
    // key node - value money
    
    public void distribute(String sellerName, int revenue) {
        String p = parent.get(sellerName); // parent name
        if (revenue < 10) { // 수익을 더 이상 나눌 수 없는 경우
            money.put(sellerName, money.get(sellerName)+revenue);
            return ;
        }
        Integer charges = revenue-revenue/10;
        if (p.equals("-")) { // 부모가 center일 경우
            money.put(sellerName, money.get(sellerName)+charges);
            return ;
        }
        // 그렇지 않은 경우, 부모 노드로 따라올라가며 계속 수익을 분배한다.
        money.put(sellerName, money.get(sellerName)+charges); 
        distribute(p, revenue/10);
    }
    
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        int[] answer = new int[enroll.length];
        int members = referral.length;
        for (int i=0; i<members; i++) {
            parent.put(enroll[i], referral[i]); // kids - parents pair
            money.put(enroll[i], 0);
        }
        for (int i=0; i<seller.length; i++) {
           // 판매 이익은 개당 100원
            distribute(seller[i], amount[i]*100);
        }
        
        int i=0;
		for (String key: enroll) {
            Integer value = money.get(key);
			answer[i] = value;
            i++;
		}
        return answer;
    }
}
profile
벨로그에 틀린 코드나 개선할 내용이 있을 수 있습니다. 지적은 언제나 환영합니다.

0개의 댓글