728x90
https://school.programmers.co.kr/learn/courses/30/lessons/77486
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
분석
판매원에게 배분된 이익금의 총합을 계산하여(정수형으로), 입력으로 주어진 enroll에 이름이 포함된 순서에 따라 나열
seller, amount에 따른 이익이 날때마다 배분금액 계산 후 잔여량 수익금에 저장
풀이
1. 리스트 인덱스 딕셔너리 저장
def solution(enroll, referral, seller, amount):
money = [0 for _ in range(len(enroll))]
dict = {}
for i, e in enumerate(enroll):
dict[e] = i
for s, a in zip(seller, amount):
m = a * 100 # 이익금
while s != "-" and m>0:
idx = dict[s]
money[idx] += m-m//10 # 수익 저장
m //= 10 # 배분
s = referral[idx] # 상위로 이동
return money
2. 재귀
def solution(enroll, referral, seller, amount):
parent = dict(zip(enroll, referral))
answer = dict(zip(enroll, [0]*len(enroll)))
def distribute(target, money):
if money<10:
answer[target]+=money
elif parent[target]=='-':
answer[target]+=money-money//10
else:
answer[target]+=money-money//10 # 수익
distribute(parent[target], money//10) # 분배
for s,t in zip(seller, amount):
distribute(s, t*100) # 이익금
return list(answer.values())
728x90