import java.util.*;
class Solution {
public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
Map<String,Member> memberMap=new HashMap<>();
Member commander=new Member("-",new Member());
memberMap.put("-",commander);
for (int i = 0; i < enroll.length; i++) {
String name=enroll[i];
// if(referral[i]=="-"){
// Member member = new Member(name, null);
// memberMap.put(name,member);
// }else{
//TODO : 만약 런타임 뜬다면 여기서 나는거임 (부모가 아직 없는 경우)
Member parent = memberMap.get(referral[i]);
Member member = new Member(name, parent);
//parent.kidList.add(member);
memberMap.put(name,member);
// }
}
for (int i = 0; i < seller.length; i++) {
Member member = memberMap.get(seller[i]);
int price=amount[i]*100;
// System.out.println("price:"+price);
Member target=member;
while (target.name != "-") {
// System.out.println("now target name:"+target.name);
// System.out.println("Got price:"+price);
// System.out.println("before add : "+target.revenue);
int newPrice= (price/10)*10;
int nextPrice=(int)(newPrice*0.1);
target.revenue+=price-nextPrice;
// System.out.println("after add : "+target.revenue);
price=nextPrice;
// System.out.println("will send price:"+price);
target=target.parent;
}
// System.out.println("after loop, before final last price:"+target.revenue);
target.revenue+=price;
// System.out.println("real last price : "+target.revenue);
}
List<Integer> ansList=new ArrayList<>();
for (String s : enroll) {
ansList.add(memberMap.get(s).revenue);
}
return ansList.stream().mapToInt(i->i).toArray();
}
class Member{
String name;
Member parent;
public Member() {
}
int revenue;
List<Member> kidList=new ArrayList<>();
public Member(String name, Member parent) {
this.name = name;
this.parent = parent;
this.revenue = 0;
}
}
}
문제가 너무 친절했다..
그냥 수익을 받으면 해당 수익자 기준 부모를 찾아가며 이익금을 분배(상납)하면 되는 문제였다
'Algorithm > Programmers' 카테고리의 다른 글
[Lv.3] 양과 늑대 (0) | 2023.04.13 |
---|---|
[Lv.3] 파괴되지 않은 건물 (0) | 2023.04.13 |
[Lv.3] 자물쇠와 열쇠 (0) | 2023.04.13 |
[Lv.3] 경주로 건설 (0) | 2023.04.12 |
[Lv.3] 베스트 앨범 (0) | 2023.04.12 |