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

섬섬's 개발일지·2022년 2월 11일
0

프로그래머스

목록 보기
13/50

문제

각 판매원의 이름을 담은 배열 enroll, 각 판매원을 다단계 조직에 참여시킨 다른 판매원의 이름을 담은 배열 referral, 판매량 집계 데이터의 판매원 이름을 나열한 배열 seller, 판매량 집계 데이터의 판매 수량을 나열한 배열 amount가 매개변수로 주어질 때, 각 판매원이 득한 이익금을 나열한 배열을 return하도록 solution 함수를 완성해주세요. 판매원에게 배분된 이익금의 총합을 계산하여 (정수형으로), 입력으로 주어진 enroll에 이름이 포함된 순서에 따라 나열하면 됩니다.

제한사항

  • enroll의 길이는 1이상 10,000 이하입니다.
    • enroll에 민호의 이름은 없습니다. 따라서 enroll의 길이는 민호를 제외한 조직 구성원의 총 수입니다.
  • referral의 길이는 enroll의 길이와 같습니다.
    • referral 내에서 i 번째에 있는 이름은 배열 enroll 내에서 i번째에 있는 판매원을 조직에 참여시킨 사람의 이름입니다.
    • 어느 누구의 추천도 없이 조직에 참여한 사람에 대해서는 referral 배열 내에 추천인의 이름이 기입되지 않고 "-"가 가입됩니다. 위 예제에서는 john과 mary가 이러한 예에 해당합니다.
    • enroll에 등장하는 이름은 조직에 참여한 순서에 따릅니다.
    • 즉, 어느 판매원의 이름이 enroll의 i번째에 등장한다면, 이 판매원을 조직에 참여시킨 사람의 이름, 즉 referral의 i번째 원소는 이미 배열 enroll의 j번째(j<i)에 등장했음이 보장됩니다.
  • seller의 길이는 1 이상 100,000 이하입니다.
    • seller 내의 i 번째에 있는 이름은 i번째 판매 집계 데이터가 어느 판매원에 의한 것인지를 나타냅니다.
    • seller에는 같은 이름이 중복해서 들어있을 수 있습니다.
  • amount의 길이는 seller의 길이와 같습니다.
    • amount내의 i번째에 있는 수는 i번째 판매 집계 데이터의 판매량을 나타냅니다.
    • 판매량의 범위, 즉 amount의 원소들의 범위는 1 이상 100 이하인 자연수입니다.
  • 칫솔 한 개를 판매하여 얻어지는 이익은 100원으로 정해져 있습니다.
  • 모든 조직 구성원들의 이름은 10글자 이내의 영문 알파벳 소문자들로만 이루어져 있습니다.

코드

def solution(enroll, referral, seller, amount):
    answer = []
    member = {}
    for index, ref in enumerate(referral):
        member[enroll[index]] = { 'parent': ref, 'money': 0 }
    for index,sell in enumerate(seller):
        count(sell,amount[index]*100,member)
    for en in enroll:
        answer.append(member[en]['money'])
    return answer

def count(seller, amount, member):
    fee = amount // 10
    member[seller]['money'] += amount - fee
    if fee < 1:
        return
    elif member[seller]['parent'] == '-':
        return
    else:
        count(member[seller]['parent'], fee, member)
profile
섬나라 개발자

0개의 댓글