다단계 하는 회사가 있는데, 그 회사의 조직 구성도는 이러하다.
이 회사의 수익 구조는 만약 말단 직원인 young이 1200원을 벌었다고 가정하자.
그럼 이런식으로 young은 1200원에서 수수료(10%)를 자신의 추천인(edward)에게 떼준다.
그럼 edward는 자신의 추천인(mary)에게 young에게 받았던 수수료(10%)의 10%를 떼준다.
그래서 판매원의 이름과, 그 사람의 추천인과 판매정보(seller와 그 seller가 얼마나 팔았는지)에 대한 매개변수가 주어지면, 우리는 꼭대기 직원 말고 그 밑의 직원들이 얼마씩 벌었는지에 대해 return해주면 된다.
입출력 예 #1
이건 문제 예신데, 1번의 입출력을 다 하고나면 직원은 이렇게 수익을 분배하게 된다.
입출력 예 #2
문제에 주어진 예시와 동일한 조직 구성에 조금 다른 판매량 집계를 적용한 것입니다. 이익을 분배하는 규칙이 동일하므로, 간단한 계산에 의하여 표에 보인 결과를 얻을 수 있습니다.
문제 설명이 너무 길다...
근데 다단계라는 소재가 좋았던 탓인지 풀 때 재밌게 풀었다 ㅋㅋ
컴파일은 한번에 통과!
import java.util.*; class Solution { Map<String, Integer> amountmap = new HashMap<>(); Map<String, String> parentmap = new HashMap<>(); public void setting(String[] enroll, String[] referral, String[] seller, int[] amount) { for(int i = 0; i < enroll.length; i++) { amountmap.put(enroll[i], 0); } for(int i = 0; i < referral.length; i++) { if(referral[i].equals("-")) parentmap.put(enroll[i], "minho"); else parentmap.put(enroll[i], referral[i]); } for(int i = 0; i < seller.length; i++) { amount[i] *= 100; } } public int get_index(String[] enroll, String man) { for(int i = 0; i < enroll.length; i++) { if(man.equals(enroll[i])) return i; } return 0; } public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) { int[] answer = new int[enroll.length]; setting(enroll, referral, seller, amount); for(int i = 0; i < seller.length; i++) { int money = amount[i]; String slr = seller[i]; while(money > 0 && !slr.equals("minho")) { amountmap.put(slr, amountmap.get(slr) + (money - money/10)); money /= 10; slr = parentmap.get(slr); } } List<Map.Entry<String, Integer>> list = new ArrayList<>(amountmap.entrySet()); for(Map.Entry<String, Integer> entry : list) { answer[get_index(enroll, entry.getKey())] = entry.getValue(); } return answer; } }