문제 링크
https://programmers.co.kr/learn/courses/30/lessons/77486
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
programmers.co.kr
문제 풀이
- 테스트 11, 12, 13번째에서 시간 초과 발생 -> pay가 0일 때 break하는 코드 추가하니 해결됨
# https://programmers.co.kr/learn/courses/30/lessons/77486
import math
def solution(enroll, referral, seller, amount):
answer = []
# 추천인 저장
dic = dict()
# 이익 저장
result = dict()
# 판매원 별 추천인과 이익을 0으로 설정
for i in range(len(enroll)):
dic[enroll[i]] = referral[i]
result[enroll[i]] = 0
for i in range(len(seller)):
# 판매량 저장
result[seller[i]] += amount[i]* 100
# 판매한 사람
sel = seller[i]
# 판매량
num = amount[i] * 100
# 추천인들에게 분배
while True:
# 현재 판매원의 추천인
tmp = dic[sel]
# 소수점 버림
pay = math.trunc(num*0.1)
if pay ==0:
break
# 추천인이 민호인 경우
if tmp == '-':
result[sel] -= pay
break
# 추천인에게 10% 주고, 판매원에게서 제외
result[tmp] += pay
result[sel] -= pay
# 다음 추천인에게 해당되는 판매량 갱신
num = pay
# 판매원 갱신
sel = tmp
# 판매량만 리스트 형태로
return list(result.values())
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level3] 합승 택시 요금 -python (0) | 2022.01.10 |
---|---|
[프로그래머스][level3] 불량 사용자 -python (0) | 2022.01.10 |
[프로그래머스][level3] 2 x n 타일링 -python (0) | 2022.01.03 |
[프로그래머스][level3] 이중우선순위큐 -python (0) | 2022.01.03 |
[프로그래머스][level3] 보석 쇼핑 -python / 투 포인터 (0) | 2022.01.03 |