문제 보러 가기👈 클릭!
✔ 문제 파악
칫솔 1개를 팔면 100원을 버는 다단계 조직이 있음. 이때, 자기가 버는 돈을 다 가지는게 아니라 다단계 조직에서 윗사람한테 10%을 주고 나머지 90%를 가짐. 윗사람의 윗사람도 윗사람이 받은 10%의 10%를 받음. 이때 각 조직원들에게 배분 된 이익금 총 합을 return.
각 조직원의 이름을 담은 배열 enroll, 각 조직원을 다단계 조직에 참여시킨 다른 조직원의 이름을 담은 배열 referral, 판매량 집계 데이터의 판매원 이름을 나열한 배열 seller, 판매량 집계 데이터의 판매 수량을 나열한 배열 amount가 매개변수로 주어짐
단, 10%가 1원 미만일 경우 본인이 전부 가짐.
✔ 풀이 방법
ex) group = {'john': '-', 'mary': '-', 'edward': 'mary', 'sam': 'edward', 'emily': 'mary', 'jaimie': 'mary', 'tod': 'jaimie', 'young': 'edward'}
ex) answer = {'john': 360, 'mary': 958, 'edward': 108, 'sam': 0, 'emily': 450, 'jaimie': 18, 'tod': 180, 'young': 1080}
'칫솔을 판 사람'부터 시작하여 이 사람들 데려온 윗사람, 또 그 윗사람..으로 더 이상 윗사람이 없을때까지 올라가며 이득을 각각 분배함.
이득은 정수이어야 하기 때문에 10%을 구할 때, 0.1을 곱하는 방법 말고, 10으로 나눈 몫을 구하는 방법을 사용함.
def solution(enroll, referral, seller, amount):
answer = dict() #이름 : 분배 후 이익 (초기값은 0)
group = dict() #이름 : 참여시킨 다른 사람 이름
for i in range(len(enroll)):
answer[enroll[i]] = 0
group[enroll[i]] = referral[i]
for i in range(len(seller)):
name = seller[i]
income = amount[i]*100 #분배 전 수익
while name != '-':
if income // 10 < 1:
answer[name] += income
break
else:
answer[name] += income - (income // 10)
name = group[name] #윗 사람
income //= 10 #윗 사람이 받는 이득
return list(answer.values())