[프로그래머스] 다단계 칫솔 판매

단간단간·2024년 4월 8일
0

알고리즘 문제

목록 보기
49/106

문제 링크:

https://school.programmers.co.kr/learn/courses/30/lessons/77486

회고:

  • 문제 설명이 다소 부족하다고 느낌
  • 3번, 6번을 제외한 나머지 케이스에서 오답이 발생하면 해당 내용을 숙지하고 있는지 확인할 것
    1. seller 에는 중복 판매자가 있을 수 있고, 한번에 합산해서 추천자에게 10퍼센트를 주는 것이 아니라 각각 따로따로 10퍼센트 먹여서 추천자에게 넘겨줘야 함
    2. 내 모든 이익(=내가 추천한 사람들로 부터 받은 10퍼센트 금액까지 포함)을 합산해서 10퍼센트 매긴 값을 추천인에게 보내주는것이 아님. 따로따로 10퍼센트 먹여서 추천인에게 주어야 함.

def solution(enroll: list, referral: list, seller: list, amount: list) -> list:
    profits = {}
    recommend_info = {}  # 내가 추천한 사람들
    recommender = {}  # 나를 추천한 사람

    for name in enroll:
        recommend_info[name] = []
        recommender[name] = None
        profits[name] = 0

    for recommended, recommend in zip(enroll, referral):
        if recommend != "-":
            recommend_info[recommend].append(recommended)
            recommender[recommended] = recommend

    for name, money in zip(seller, amount):
        money *= 100
        ten_percent = int(money / 10)
        profits[name] += money - ten_percent
        next_name = recommender[name]

        while next_name is not None and ten_percent != 0:
            money = ten_percent
            ten_percent = int(money / 10)
            profits[next_name] += money - ten_percent
            next_name = recommender[next_name]

    return [profits[name] for name in enroll]


if __name__ == "__main__":
    result = solution(
        enroll=["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"],
        referral=["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"],
        seller=["sam", "emily", "jaimie", "edward"],
        amount=[2, 3, 5, 4]
    )
[0, 110, 378, 180, 270, 450, 0, 0]
True
profile
simple is best

0개의 댓글