Lv3 프로그래머스(Programmers)[Python][파이썬] 다단계 칫솔 판매

"""
출처:프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/77486
"""

# 내 풀이
"""

생각방향:등비급수처럼 리스트를 만든 후 맨 위에 지속적으로 더해주는 형태

목표:enroll에 적힌 판매원들의 수익을 출력
"""

from collections import defaultdict
import math

# 판매원 수익 명단 dic
check = []
name = []


# 추천인 분배
def divide(e, r, n, p):
global check, name

# 1원 미만으로 분배금이 떨어질 경우 분배금 발생 x
while n >= 1:

# 등록자 번호 위치
k = name[p]

# 추천인이 없는 경우
if r[k] == "-":
break

# 추천인이 있는 경우
else:
check[r[k]] += math.ceil(n * (0.9))

n = int(n * (0.1))

# 더 위의 상위순번 추천자 시작
p = r[k]

return 0


def solution(enroll, referral, seller, amount):
global check, name

check = defaultdict(int)

name = defaultdict(int)

for i, j in enumerate(enroll):
check[j] = 0
name[j] = i

# 구성원
e = enroll

# 추천인 찾기
r = referral

# 판매 집계 데이터의 판매원 이름
s = seller

# 판매 집계 데이터
a = amount

for i in range(len(a)):
n = a[i] * 100 # 판매량*단가
p = s[i] # 판매원

# 처음 판매자 수익금 가져가기
check[p] += math.ceil((0.9) * (n))

# 분배할 금액
n = int(n * (0.1))

# 구성원 명단,추천인 명단,남은 분배금액, 최초 판매자
divide(e, r, n, p)

result = []

for f in enroll:
result.append(check[f])

return result