[Python3]프로그래머스_다단계 칫솔 판매

Beanzinu·2022년 7월 14일

코딩테스트

목록 보기
38/42

문제출처 : https://school.programmers.co.kr/learn/courses/30/lessons/77486

접근법

  1. 자신의 상위 구성원이 누구인지 dict에 저장한다.
  • A의 상위 구성원이 B인 경우 ref[A] = "B"
  • A의 상위 구성원이 center인 경우 ref[A] = "-"
  1. 판매기록인 seller 기준으로 순회한다.
  • ref에 담긴 정보를 활용하여 상위 구성원이 존재하는 경우 1원 이상인 경우1원 미만인 경우를 구분하여 현 구성원의 이익을 계산하고 상위 구성원에게 전달될 이익을 계산하는 루프를 만들었다.
  • 1원 미만인 경우 다음 전달될 이익인 next_sum이 0이므로 루프에서 벗어나게 된다.
  • 상위 구성원이 center인 경우 상위 구성원인 next_ref의 길이를 0으로 만들어 루프에서 벗어나게 했다.

코드

from collections import defaultdict
def solution(enroll, referral, seller, amount):
    answer = []
    ref = {}
    total = defaultdict(int)
    for i,name in enumerate(enroll):
        ref[name] = referral[i]
	#
    for i,name in enumerate(seller):
        next_sum = amount[i]*100 # 총 이익
        next_ref = name
		#
        while( next_ref and next_sum > 0): # 상위 구성원이 존재하는 경우
            if next_sum * 0.1 >= 1: # 1원 이상
                total[next_ref] += next_sum - int(next_sum *0.1)
                next_sum = int(next_sum*0.1)
            else:
                total[next_ref] += next_sum
                next_sum = 0
            next_ref = "" if ref[next_ref] == "-" else ref[next_ref]
	#
    for name in enroll:
        answer.append(total[name])
    return answer
profile
당신을 한 줄로 소개해보세요.

0개의 댓글