다단계 판매 조직에서는 수익이 판매자뿐만 아니라 추천인에게도 분배됩니다. 이렇게 분배되는 구조를 코딩으로 해결하는 것은 꽤 흥미로운 문제입니다. 이번 포스팅에서는 Python으로 간단히 다단계 수익 분배 알고리즘을 구현하는 방법을 살펴보겠습니다.
문제 설명
- enroll: 각 판매자의 이름 목록입니다.
- referral: 각 판매자가 가입 시 추천한 추천인의 이름 목록입니다. 추천인이 없는 경우 '-'로 표시됩니다.
- seller: 이번에 판매를 발생시킨 판매자 이름 목록입니다.
- amount: seller와 일대일로 매칭되는 판매량 목록입니다.
판매자의 수익에서 10%는 상위 추천인에게 전달되고, 90%만 자신에게 남습니다. 추천인이 계속 연결된 경우, 10%를 상위 추천인에게 전달하는 것을 반복합니다.
아래 코드는 이 문제를 해결하기 위한 Python 코드입니다.
from collections import defaultdict
def solution(enroll, referral, seller, amount):
# 판매자의 추천인을 딕셔너리로 저장
referral_dict = {enr: ref for enr, ref in zip(enroll, referral)}
# 판매자의 수익을 저장하는 딕셔너리
seller_dict = defaultdict(int)
# 수익을 분배하는 재귀 함수
def distribute_profit(seller, profit):
if seller == '-' or profit < 1: # 추천인이 없거나 이익이 1 미만일 때 중지
return
seller_dict[seller] += profit - profit // 10 # 자신의 몫 저장
distribute_profit(referral_dict[seller], profit // 10) # 상위 추천인에게 10% 전달
# 각 판매자와 판매량을 기반으로 수익 분배 시작
for s, a in zip(seller, amount):
distribute_profit(s, a * 100) # 판매량에 100을 곱하여 실제 이익 계산
# 결과를 enroll 순서에 맞춰 반환
return [seller_dict[i] for i in enroll]
코드 설명
1. 초기 설정
- referral_dict: 각 판매자와 추천인 관계를 딕셔너리로 저장합니다.
- seller_dict: 각 판매자의 최종 수익을 저장하는 딕셔너리로, defaultdict(int)를 사용해 초기값을 0으로 설정했습니다.
2. 재귀 함수: distribute_profit
이 함수는 seller의 수익을 계산하여, 상위 추천인에게 10%를 전달하는 과정을 재귀적으로 처리합니다. 판매자에게 전달된 profit에서 10%는 상위 추천인에게 전달되고, 나머지는 판매자 본인의 수익으로 누적됩니다.
재귀 함수의 종료 조건
- 추천인이 없는 경우 ('-')
- 전달할 금액이 1 미만인 경우 (정수 처리 시 더 이상 분배할 수 없을 때)
3. 메인 로직
판매자와 판매량 목록을 기반으로 distribute_profit 함수를 호출하여 수익 분배를 시작합니다. 이때 amount에 100을 곱하여 실제 수익 금액으로 변환합니다.
4. 최종 결과 반환
마지막으로, 각 판매자의 이름 순서에 맞춰 seller_dict에서 최종 수익을 추출하여 반환합니다.
'프로그래머스' 카테고리의 다른 글
풍선 터트리기 (1) | 2024.11.12 |
---|---|
2024 KAKAO WINTER INTERNSHIP 주사위 고르기 (0) | 2024.11.07 |
수식 복원하기 (0) | 2024.11.04 |