본문 바로가기
프로그래머스/Lv.3

다단계 칫솔 판매 - JAVA, Map, 2021 Dev-Matching: 웹 백엔드 개발자(상반기)

by 아찌방 2025. 5. 25.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/77486

 

프로그래머스

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

programmers.co.kr

 

 

코드 & 풀이

 

import java.util.*;

class Solution {
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        int n = enroll.length;
        Map<String, Integer> nameToIndex = new HashMap<>();
        for (int i = 0; i < n; i++) {
            nameToIndex.put(enroll[i], i);
        }
        
        int[] parent = new int[n];
        for (int i = 0; i < n; i++) {
            String cur_referral = referral[i];
            if(cur_referral.equals("-")) {
                parent[i] = -1;
            } else {
                parent[i] = nameToIndex.get(cur_referral);   
            }
        }
        
        int[] profit = new int[n];
        for (int i = 0; i < seller.length; i++) {
            String current_seller = seller[i];
            int money = amount[i] * 100;
            int current_idx = nameToIndex.get(current_seller);
            
            while (current_idx != -1 && money > 0) {
                int comition = money / 10;
                int keep = money - comition;
                
                profit[current_idx] += keep;
                money = comition;
                current_idx = parent[current_idx];
            }
        }
        
        return profit;
    }
}

 

판매원을 이름을 기준으로 index를 맵핑해줍니다.

 

그리고 판매인 별 추천인의 인덱스를 기록해줍니다.

 

이로 인해서 누가 누구의 추천인인지를 알 수 있게 됩니다.

 

그러면 이제 돈계산에 들어갑시다.

 

현재 seller를 기준으로

 

최상위인 회사. 즉, "-"을 나타내는 인덱스 -1이 올 때까지, 그리고 돈이 0원 이상일 때까지 반복문을 돌립니다.

 

현재 seller에게 남는 돈은

 

자신의 추천인에게 번 돈에서 comition(10퍼센트)을 주고 남은 돈입니다.

= money - (money / 10)

 

그리고 추천인에게는 comition이 남게 되고,

 

그 추천인은 parent[current_idx] 이죠.

 

이렇게 반복되다보면 모든 계산을 완료할 수 있습니다.

 

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

'프로그래머스 > Lv.3' 카테고리의 다른 글

아이템 줍기 - JAVA, BFS  (1) 2025.06.02
단어 변환 - JAVA, BFS, Queue  (0) 2025.06.01
순위 - JAVA, 플로이드 워셜, BFS  (1) 2025.05.22
가장 먼 노드 - Java, Graph, BFS  (2) 2025.05.21
입국심사 - Python, 이진탐색  (0) 2025.04.06