JAVA/Coding Test

[JAVA] 프로그래머스 다단계 칫솔 판매_구현

오늘도개발 2024. 12. 3. 20:03

 

 

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77486?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

접근 : 

 

  - 1. 판매한 사원으로 부터 10%의 금액을 제외한 금액을 자신의 Score 에 저장한다. (HashMap)

 

  - 2. 10% 금액은 자신의 추천한 사람에게 전달하고 추천한 사람을 기준으로 1 과정을 진행한다.

 

  - Center 에게 이익금이 갈때까지, 1~2 과정을 반복한다.

 

  - 모든 판매한 사원에 대해서 위의 과정을 반복한 후 결과를 출력한다.

 

 

young 의 이익금이 1200원 일때, 일어나는 과정

 

 

코드 구현 : 

 

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        Map<String, Integer> score = new HashMap<>();
        for(String n : enroll){ score.put(n, 0); }
        score.put("-", 0);
        Map<String, String> graph = new HashMap<>();

        for(int i = 0 ; i < referral.length ; i++){
            graph.put(enroll[i], referral[i]);
        }
        String target;
        for(int i = 0 ; i < seller.length ; i++){
            target = seller[i];
            int value = amount[i] * 100;
            int fee = (int) (value * 0.1);
            score.put(target, score.get(target) + value - fee);

            while(graph.containsKey(target)){
                target = graph.get(target);
                value = fee;
                fee = (int) (value * 0.1);
                score.put(target, score.get(target) + value - fee);
                if(fee == 0) break;
            }
        }
        int[] answer = new int[enroll.length];
        for(int i = 0 ; i < enroll.length ; i++){
            answer[i] = score.get(enroll[i]);
        }
        return answer;
    }
}