재귀함수를 사용 시 쓸데 없는 호출이 있는지 확인하자.
enroll
, referral
을 순회하며 멤버와 추천인을 저장한다.sellecr
, amount
를 순회하며 판매자, 판매한 개수 * 100 로 share()
을 호출한다.enroll
을 순회하며 money
에서 멤버를 검색하여 result
에 넣는다.result
를 반환한다.import java.util.HashMap;
import java.util.Map;
class Solution {
Map<String, String> parent = new HashMap<>();
Map<String, Integer> money = new HashMap<>();
public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
for (int i = 0; i < enroll.length; i++) {
parent.put(enroll[i], referral[i]);
}
for (int i = 0; i < seller.length; i++) {
share(seller[i], amount[i] * 100);
}
int[] result = new int[enroll.length];
for (int i = 0; i < enroll.length; i++) {
result[i] = money.getOrDefault(enroll[i], 0);
}
return result;
}
void share(String node, int sales) {
int nextSales = sales / 10;
money.put(node, money.getOrDefault(node, 0) + sales - nextSales);
if (nextSales > 0 && parent.containsKey(node)) {
share(parent.get(node), nextSales);
}
}
}