728x90
📌 문제
https://programmers.co.kr/learn/courses/30/lessons/77486
📌 문제 접근 방법
- 본인의 이름을 key값으로 추천인의 이름을 value로 recommender에 저장한다.
- 본인의 이익은 10%를 빼고 저장하고 temp에 10%만 다시 담는다.
- 계속해서 부모 노드(추천인)을 타고 올라가면서 10%만 담는 과정을 반복한다.
- 추천인이 -가 되거나 temp에 담긴 값이 0이 되면 반복문을 멈춘다. (0일때 안멈추면 11~13에서 시간초과가 난다.)
- enroll과 똑같은 순서로 answer에 이익을 저장 후 반환한다.
📌 코드
# 프로그래머스 다단계 칫솔 판매
def solution(enroll, referral, seller, amount):
# 추천인
recommender = {}
profit = {}
for i in range(len(enroll)):
recommender[enroll[i]] = referral[i]
profit[enroll[i]] = 0
# 이익
for i in range(len(seller)):
temp = amount[i]*100
parents = recommender[seller[i]]
child = seller[i]
while True:
profit[child] += temp - temp//10
temp //= 10
if parents == '-' or temp == 0:
break
child = parents
parents = recommender[child]
answer = []
for p in enroll:
answer.append(profit[p])
return answer
enroll = ["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"]
referral = ["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"]
seller = ["young", "john", "tod", "emily", "mary"]
amount = [12, 4, 2, 5, 10]
print(solution(enroll, referral, seller, amount))
728x90
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[PG/Python] N으로 표현 (0) | 2021.12.22 |
---|---|
[PG/Python] 단어 변환 (0) | 2021.12.22 |
[PG/Python] 배달 (0) | 2021.12.16 |
[PG/Python] 행렬 테두리 회전하기 (0) | 2021.12.16 |
[PG/Python] 튜플 (0) | 2021.12.16 |
댓글