알고리즘/프로그래머스

[프로그래머스]Lv3. 다단계 칫솔 판매(Python)

cha_eyoon 2024. 3. 7. 21:51

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 접근

 

1. 수익이 발생하면 상위 요소(추천인)에게 10%를 나눠줌  => 반복

2. 10원 미만이라면 본인이 남은 금액을 모두 가지고 반복 완료

 

코드
import math

def solution(enroll, referral, seller, amount):
    # 판매원과 그에 따른 레퍼럴(상위 판매원) 관계를 저장하는 딕셔너리 생성
    parentTree = dict(zip(enroll, referral))
    # 각 판매원의 수익을 저장할 딕셔너리 초기화
    answer = dict(zip(enroll, [0 for i in range(len(enroll))]))

    # 각 판매 기록을 순회
    for i in range(len(seller)):
        earn = amount[i] * 100  # 해당 판매원이 벌어들인 금액
        target = seller[i]  # 현재 판매원

        # 판매원이 수익을 받을 때까지 반복
        while True:
            if earn < 10:  # 10원 단위 이하라면 모두 받고 레퍼럴 종료
                answer[target] += earn
                break
            else:  # 10% 레퍼럴을 제외하고 받는다
                answer[target] += math.ceil(earn * 0.9)  # 90% 수익을 받음
                if parentTree[target] == "-":  # 레퍼럴이 없는 경우 종료
                    break
                earn = math.floor(earn * 0.1)  # 남은 10%를 다음 레퍼럴에게 전달
                target = parentTree[target]  # 다음 레퍼럴로 이동

    return list(answer.values())  # 각 판매원의 최종 수익을 리스트로 반환