[Python] 다단계 칫솔 판매
코딩테스트 합격자되기 파이썬 편- 문제 29
문제 > https://school.programmers.co.kr/learn/courses/30/lessons/77486
✅ 문제 접근
- 각 노드에서 부모, 자식 관계를 찾아 트리를 거슬러 올라가면서 분배할 수익을 계산해야 한다.
- 부모가 “-“, 즉 루트 노드이거나
- 분배할 금액이 1원 미만이 되면 수익 분배를 멈추어야 함
- 다른 판매원으로부터 발생한 이익은 분배한 금액에 합산된다.
✅ 기능
enroll(모든 판매원)과 referral(추천한 사람)를 부모 자식 관계로 하여 딕셔너리 형성(zip 이용)
seller를 돌면서 이익을 계산한 후, 해당 판매원의 부모를 찾아 수익을 분배한다.
- 위 조건처럼 부모가 루트 노드이면 수익 분배를 멈추어야 함
- 또는 분배할 금액이 1원 미만이 되면 모든 이익을 당사자가 가지면서 수익 분배가 끝남(더 이상 분배할 금액이 없으므로)
✅ 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(enrolls, referral, sellers, amount):
answer= {enroll: 0 for enroll in enrolls}
pc= dict(zip(enrolls, referral))
for i in range(len(sellers)):
profit= amount[i]*100
seller= sellers[i]
while seller!= '-' and profit>0:
answer[seller] += profit- profit//10
seller= pc[seller]
profit//= 10
return [value for _, value in answer.items()]
✅ 회고
-
이진 트리의 부모, 자식 관계를 딕셔너리의 키와 값으로 나타내어 구현하였다. 처음에 구현하기 위한 제한 조건이나 필요한 기능들은 잘 생각하였는데 직접 구현할 때 조금 버벅거렸다. ㅠㅠ 아직 성장할 구석이 이만치=_= ;; ;;
This post is licensed under CC BY 4.0 by the author.