코딩테스트/Java

(프로그래머스) 다단계 칫솔

SK_MOUSE 2021. 7. 29. 16:33
반응형

young이 1200원 수익일때(좌) , john이 400원 수익일때(우)

위처럼 자식노드에서 수익이 발생시, 부모노드에게 자기의 이익을 나눠주는 방식이다.

 

따라서 처음에는 graph방식으로 구현을 하려다가,

각각의 노드의 이름이 String형식으로 제시되었으니 Map을 이용해서 Key(이름)에 따른 Value(수익)으로 구현하였다.

 

단, 각각의 노드에 대하여 부모-자식 관계일 필요 없이 부모가 있으면 재귀를 호출하게 되는 방식이면 충분했다.

 

따라서, enroll_refer 이라는 HashMap을 구현하여 자식노드에 대하여 부모를 참조할 수 있게 했다.

 

import java.util.HashMap;

class Solution {
    static HashMap<String, Integer> hm = new HashMap<>();
    static HashMap<String, String> enroll_refer = new HashMap<>();

    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        for(int i=0; i<enroll.length; i++) {
            enroll_refer.put(enroll[i], referral[i]);
            hm.put(enroll[i], 0);
        }


        for(int i=0; i<seller.length; i++){
            String s = seller[i];
            int earn = amount[i] *100;
            dadange(s, earn);
        }
        int[] answer = new int[enroll.length];
        int i=0;
        for(String s : enroll){
            answer[i++] = hm.get(s);
        }

        return answer;
    }
    static void dadange(String me, int mine){
        int upVal = (int)(mine*0.1);
        upVal = Math.round(upVal);

        hm.put(me,hm.get(me)+(mine-upVal));
        if(upVal<1) return;

        if(upVal>0 && !enroll_refer.get(me).equals("-"))//추천인한테 줄돈이 0초과 && 위에 추천인이 있을경우 재귀
            dadange(enroll_refer.get(me), upVal);
    }
}

 

풀이후기) 프로그래머스에서 기존에  카카오LV3 문제를 풀었을때에 비하여 쉬운편이었다. 

반응형