-
[Python] Programmers 다단계 칫솔 판매카테고리 없음 2021. 7. 31. 18:32728x90
1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/77486
2. 문제 요약
- 부모 노드에게 10% 수익을 배분하여 판매원들의 이익금을 구하는 문제
3. 아이디어 정리
판매자 별 부모에게 칫솔 수익을 나눠준다.
- 부모가 있는 경우
- 부모에게 수익 배분 & 자신의 수익에서 배분한 금액만큼 빼기
- 내 부모가 부모의 부모에게 수익 배분하기 위해 재귀 호출
- 부모가 없는 경우고 센터한테만 수익 배분하고 끝
4. 문제 풀이
4-1. 내 풀이
def solution(enroll, referral, seller, amount): """ 칫솔 1개 = 100원 :param enroll: 각 판매원의 이름을 담은 배열 :param referral: 각 판매원을 다단계 조직에 참여시킨 다른 판매원의 이름을 담은 배열 :param seller: 판매량 집계 데이터의 판매원 이름을 나열한 배열 :param amount: 판매량 집계 데이터의 판매 수량을 나열한 배열 :return: 이익금 """ def set_parent_result(sell, money): """ 부모한테 10% 수익 나누기 - 재귀 """ if money <= 0: # 돈이 0원이되면 끝내기 return # 1. 부모가 있는 경우 부모에게 수익 배분 & 자신의 수익에서 배분한 금액만큼 빼기 if parents[sell] != '-': answer[location[parents[sell]]] += int(money / 10) answer[location[sell]] -= int(money / 10) # 내 부모가 부모의 부모에게 수익 배분하기 위해 재귀 호출 return set_parent_result(parents[sell], int(money / 10)) else: # 2. 부모가 없는 경우고 센터한테만 수익 배분하고 끝 answer[location[sell]] -= int(money / 10) return answer = [0] * len(enroll) parents = dict() # 자신의 부모 location = dict() # 자신의 위치 # 자신의 부모와 자신의 위치를 입력 for i, (en, refer) in enumerate(zip(enroll, referral)): parents[en] = refer location[en] = i # 판매자 별 부모에게 칫솔 수익 나눠주기 for sell, count in zip(seller, amount): answer[location[sell]] += count * 100 # 칫솔 수익 추가 set_parent_result(sell, count * 100) # 부모한테 10% 떼어주기 return answer
5. 결론
- 재귀를 이용하여 부모에게 배분하는 함수만 짜면 쉬웠던 문제이다.