<Lv.3> 다단계 칫솔 판매 (프로그래머스 : C#)

이도희·2023년 9월 13일
0

알고리즘 문제 풀이

목록 보기
161/185

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

📕 문제 설명

판매원은 추천인에게 10%의 수익을 주고, 나머지는 본인이 가진다. 최종적으로 판매원들이 가지는 수익 반환하기

칫솔을 하나 판매해서 얻을 수 있는 이익 : 100원

  • Input
    각 판매원의 이름 enroll, 각 판매원을 조직에 참여시킨 다른 판매원의 이름 referral, 판매량 집계 데이터의 판매원 이름을 나열한 배열 seller, 판매량 집계 데이터의 판매 수량 amount

  • Output
    각 판매원이 득한 이익금

예제

풀이

문제 설명대로 구현하면 되는 간단한 문제다. 재귀를 활용해서 주어진 profit에 대해 추천인으로 타고 가면서 수익 분배하는 식으로 구현했다.

using System;
using System.Collections.Generic;

public class Solution {
    private Dictionary<string, int> enrollToIndex;
    private int[] answer;
    public int[] solution(string[] enroll, string[] referral, string[] seller, int[] amount) {
        enrollToIndex = new Dictionary<string, int>();
        enrollToIndex["-"] = -1;
        for (int i = 0; i < enroll.Length; i++)
        {
            enrollToIndex[enroll[i]] = i;
        }
        
        answer = new int[enroll.Length];
        
        // seller 순회 => amount 만큼 결과 계산 및 10% 수익떼서 referral에게 주기 
        for (int i = 0; i < seller.Length; i++)
        {
            string currentSeller = seller[i];
            int profit = amount[i] * 100; // 수익 (판매한 칫솔 개수 * 100원)
            
            DistributeProfit(enrollToIndex[currentSeller], profit, referral);  
        }      
        
        return answer;
    }
    
    private void DistributeProfit(int sellerIndex, int profit, string[] referral)
    {
        if (sellerIndex == -1) return; // center까지 분배 끝난 경우

        int referralIndex = enrollToIndex[referral[sellerIndex]]; // 추천인 index

        int profitToDistribute = profit / 10;
        int remainedProfit = profit - profitToDistribute;

        answer[sellerIndex] += remainedProfit; // 분배 후 남은 금액 추가

        if (profitToDistribute > 0) // 분배해야하는 경우
        {
            DistributeProfit(referralIndex, profitToDistribute, referral);
        }
    }
}

결과

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글