[Programmers] 다단계 칫솔 판매

Updated:

다단계 칫솔 판매

다단계 칫솔 판매 를 클릭하면 바로 이동한다.


일단 문제가 매우매우 길어 정말 짜증난다..

그래도 읽다보면 간단한 문제이다..

부모노드를 계속 찾아 올라가며 상납금을 더해주면 된다.

그런데 판매 정보를 저장할 때, 같은 이름이 있을 수 있어 사전으로 저장을 하면 안된다. 이 부분을 간과해서 계속 틀리고 있었다..


def solution(enroll, referral, seller, amount):
    answer = {name: 0 for name in enroll}

    # 1. 부모 정보를 저장한 사전 생성한다.
    parent_info = {name: "" for name in enroll}
    for parent, child in zip(referral, enroll):
        if parent != '-':
            parent_info[child] = parent

    # 2. 판매 정보를 저장한 리스트 생성, 같은 이름이 있을 수 있기 때문에 리스트로 생성한다.
    seller_info = [[name, cost * 100] for name, cost in zip(seller, amount)]
    
    # 3. 루트까지 올라가며 판매금액의 10% 정산한다.
    for info in seller_info:
        me = info[0]
        parent = parent_info[me]

        start_money = info[1]
        # 4. 수익금에 대한 10퍼센트를 계산한다.
        parent_cost = int(start_money * 0.1)
        # 5. 절삭이 있기 때문에 0.9를 곱해서 계산하면 안되고 상납할 돈에서 빼야한다.
        my_cost = start_money - parent_cost
        answer[me] += my_cost

        # 6. 재귀나 반복문을 통해 부모노드를 계속 탐색한다.
        while parent != "":
            start_money = parent_cost
            parent_cost = int(start_money * 0.1)
            my_cost = start_money - parent_cost

            me = parent
            parent = parent_info[me]
            answer[me] += my_cost

    return list(answer.values())


if __name__ == "__main__":
    enroll = ["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"]
    referral = ["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"]
    seller = ["young", "john", "tod", "emily", "mary"]
    amount = [12, 4, 2, 5, 10]

    print(solution(enroll, referral, seller, amount))



Categories:

Updated:

Leave a comment