💡Problem Solving/Programmers

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

gom20 2021. 12. 2. 23:49

문제

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

 

코딩테스트 연습 - 다단계 칫솔 판매

민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,

programmers.co.kr

풀이

구현 문제이다. 

name, referral, amount를 멤버로 가지는 Seller 클래스와 

key:name, value:Seller를 가지는 HashMap을 구현하여 문제를 풀었다.

 

소스코드

import java.util.*;

class Seller {
    String name;
    String referral;
    int amount;

    public Seller (String name, String referral){
        this.name = name; 
        this.referral = referral;
    }
}
class Solution {
    public int[] solution(String[] enrolls, String[] referrals, String[] sellers, int[] amounts) {
        // key: 이름, value: 직원 객체 맵을 만든다.
        HashMap<String, Seller> sellerMap = new HashMap<String, Seller>();
        for(int i = 0; i < enrolls.length; i++){
            sellerMap.put(enrolls[i], new Seller(enrolls[i], referrals[i]));
        }
        
        // 직원 별 판매 금액 합계를 낸다.
        for(int i = 0; i < sellers.length; i++){
            int profit = amounts[i]*100;
            
            Seller seller = sellerMap.get(sellers[i]);
            int idx = 0;
            while(true){    
                seller.amount += profit;
                seller.amount -= profit/10;              
                profit = profit/10;
                if(profit == 0 || seller.referral.equals("-")) break;
                seller = sellerMap.get(seller.referral);
            }
        }
 
        int[] answer = new int[enrolls.length];
        for(int i = 0; i < enrolls.length; i++){
            answer[i] = sellerMap.get(enrolls[i]).amount;
        }
        
        return answer;
    }

}