Algorithm/Programmers

[Lv.3] 다단계 칫솔 판매

시롱시롱 2023. 4. 13. 13:34
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;
        }
    }
}

문제가 너무 친절했다..

그냥 수익을 받으면 해당 수익자 기준 부모를 찾아가며 이익금을 분배(상납)하면 되는 문제였다