ALGORITHM/Kakao

[Python] 다단계 칫솔 판매

김쿸후 2022. 3. 24. 19:45

1. 문제

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

 

코딩테스트 연습 - 다단계 칫솔 판매

민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,

programmers.co.kr

 

2. 풀이

  • 계속 시간 초과가 나서 찾아보니 share가 0이 되면 멈추라고 하던데.. 나는 멈추는데도 계속 시간초과가 났다.
  • 그래서, list.index(name)함수로 인덱스 번호 찾던걸, dictionary로 변경하니 시간 초과가 안걸렸다.
  • dictionary가 확실히 빠르고 효율성이 좋은 듯.. 애용하자 ..ㅎㅋ

내가 푼 방법

  1. seller 를 for문을 돌려서 하나씩 answer에 이익을 더해준다.
  2. 이때 seller의 referral이 존재하면 while문으로 계속 referral을 검색해서 계속 추천인들의 이익을 더해준다.
  3. referral이 - 이거나 share가 0이 되면 중지!

 

3. 코드

def solution(enroll, referral, seller, amount):
    answer = [0]*len(enroll)

    # 칫솔 판매 금액 개당 백원
    for idx, money in enumerate(amount):
        amount[idx] = money * 100
    
    # enroll 리스트로 dict 만들기
    enroll_dict = {}
    for idx,name in enumerate(enroll):
        enroll_dict[name] = idx
        
    # seller 판매한거 for문
    for idx, name in enumerate(seller):
        idx_seller = enroll_dict[name]
        ref_name = referral[idx_seller]
        share = int(amount[idx] * 0.1)
        answer[idx_seller] += amount[idx] - share

        while (ref_name != "-" and share):
            idx_ref = enroll_dict[ref_name]
            ref_name = referral[idx_ref]
            answer[idx_ref] += share - int(share*0.1)
            share = int(share*0.1)
            
    return answer

'ALGORITHM > Kakao' 카테고리의 다른 글

[Python] 합승 택시 요금  (0) 2022.03.31
[Python] 순위 검색  (0) 2022.03.31
[Python] 사라지는 발판  (0) 2022.03.24
[Python] 행렬 테두리 회전하기  (0) 2022.03.22
[Python] 파괴되지 않은 건물  (0) 2022.03.16