알고리즘/프로그래머스
[프로그래머스]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()) # 각 판매원의 최종 수익을 리스트로 반환