위처럼 자식노드에서 수익이 발생시, 부모노드에게 자기의 이익을 나눠주는 방식이다.
따라서 처음에는 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 문제를 풀었을때에 비하여 쉬운편이었다.
반응형
'코딩테스트 > Java' 카테고리의 다른 글
[JAVA] 백준 상어초등학교 (0) | 2021.08.26 |
---|---|
[JAVA] 백준 나무재테크 (0) | 2021.08.18 |
(프로그래머스) 행렬 테두리 회전하기 (0) | 2021.07.20 |
(프로그래머스) 로또의 최고순위와 최저 순위 (0) | 2021.07.19 |
[JAVA] 백준 원판 돌리기 (0) | 2021.07.08 |