https://school.programmers.co.kr/learn/courses/30/lessons/77486
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
다단계 판매 구조에서 각 판매원이 얻은 수익을 계산하는 문제다.
판매원의 추천 관계를 기반으로 수익을 배분하며,
일정 비율의 수익은 상위 추천인에게 전달되고 나머지는 자신이 보유하게 된다.
solution 메서드는 먼저 판매원과 추천인의 관계를 relation 맵에 저장하고,
각 판매원의 초기 수익을 0으로 설정한다.
추천인이 없는 경우 center로 설정해 루트 노드를 명시한다.
이후 판매원들의 판매 정보를 순회하며,
각 판매원의 수익을 계산하기 위해 distribute 메서드를 호출한다.
distribute 메서드는 현재 판매원의 수익을 계산하고,
그중 10%는 추천인에게 전달하며 나머지는 자신이 가져간다.
추천인이 center에 도달하거나,
분배 금액이 0이 되면 분배를 중단한다.
추천인이 있다면 재귀적으로 상위 추천인에게 수익을 전달한다.
최종적으로, 각 판매원의 이름 순서에 따라 수익을 배열로 반환한다.
재귀적으로 수익을 분배하는 형식으로 구현하였으며,
모든 판매원의 수익을 계산하였다.
import java.util.*;
class Solution {
Map<String,String> relation;
Map<String,Integer> money;
void distribute(String name, int profit){
int commission = profit/10;
String next = relation.get(name);
money.put(name,money.get(name)+(profit-commission));
if(commission == 0 || next.equals("center"))
return ;
distribute(next,commission);
}
public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
int[] answer = {};
relation = new HashMap<>();
money = new HashMap<>();
money.put("center",0);
//관계저장, 이익 초기화
for(int i = 0 ; i < enroll.length ; i++){
money.put(enroll[i],0);
if(referral[i].equals("-")){
relation.put(enroll[i],"center");
continue;
}
relation.put(enroll[i],referral[i]);
}
for(int i = 0 ; i < seller.length; i++)
distribute(seller[i],amount[i]*100);
return Arrays.stream(enroll)
.mapToInt(a->money.get(a))
.toArray();
}
}
'Algorithm & Data Structures > Programers' 카테고리의 다른 글
Lv 3. 풍선 터트리기 (1) | 2024.12.04 |
---|---|
Lv 3. 거스름돈 (0) | 2024.12.02 |
Lv 3. [1차] 셔틀버스 (0) | 2024.11.26 |
Lv 3. 가장 긴 펠린드롬 (3) | 2024.11.21 |
Lv 3. 부대복귀 (0) | 2024.11.19 |