PS/Python

[Programmers] 다단계 칫솔 판매(파이썬, Python)

w00se 2021. 7. 24. 00:37

https://programmers.co.kr/learn/courses/30/lessons/77485

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

 

코딩테스트 연습 - 다단계 칫솔 판매

민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,

programmers.co.kr

 

이 문제는 Programmers의 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 문제집에 있는 문제로 Level 3에 해당되는 문제입니다.

 

해당 문제는 조직원, 각 조직원 별 추천인, 판매 직원, 각 판매에 대한 판매액이 입력 값으로 주어지며 모든 조직원의 수익을 계산하는 것이 목표입니다.

 

접근 방식

문제에 명시되어 있는 조건에 따라 구현을 했습니다.

 

추천한 사람 - 추천받은 사람의 관계는 부모 - 자식 관계와 같으며 조직은 이러한 관계로 이루어진 트리 구조입니다.

저는 조직을 구현할 때 해시를 이용했으며 예시는 아래와 같습니다.

organization [추천받은 사람]  = (추천인, 추천받은 사람의 인덱스)

 

각 판매 실적 별 조직원의 수익 계산은 for문과 while문을 조합해서 구현했으며 각 조직원의 수익은 아래 식에 따라 계산했습니다.

추천인에게 나눌 수익 = math.floor((현재 조직원이 얻은 수익) * 0.1)
현재 조직원이 실제 가질 수익 = (현재 조직원이 얻은 수익) - (추천인에게 나눌 수익)

 

전체 코드

import math

def solution(enroll, referral, seller, amount):
    answer = [0] * len(enroll)
    
    organization = {}

    for idx in range(len(enroll)):
        organization[enroll[idx]] = (referral[idx], idx)
        
    for idx in range(len(seller)):
        cp, ca = seller[idx], amount[idx] * 100
        up, ci = organization[cp]
        
        sh = math.floor(ca * 0.1)
        
        answer[ci] += ca - sh
        
        while not (sh == 0 or up == "-"):
            ca = sh
            up, ci = organization[up]
            sh = math.floor(ca * 0.1)
            
            answer[ci] += ca - sh
    
    return answer

읽어 주셔서 감사합니다 :)

잘못된 부분이 있다면 댓글로 편히 알려주세요😊