CodingTest/Programers

[programers] 프로그래머스(파이썬) : 다단계 칫솔 판매

JunJangE 2022. 1. 21. 13:09

문제

 

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

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

programmers.co.kr

알고리즘

- 조직 구성원과 추천인을 딕셔너리형으로 만든다.

- 조직 구성원과 구성원들의 이익금을 딕셔너리형으로 만든다.

- 반복문을 통해 판매원을 확인한다.

- 확인 중인 판매원의 판매 금액을 가지고 반복문을 통해 그 판매원의 추천인을 확인한다.

- 현재 판매 금액이 10원보다 적다면 현재 조직 구성원에게 돈을 다 주고 반복을 멈춘다.

- 현재 판매 금액이 10원보다 크다면 판매금액에 10%를 제외하고 현재 조직 구성원에게 돈을 준다.

- 현재 조직 구성원의 추천인이 민호라면 반복을 멈춘다.

- 현재 조직 구성원의 추천인이 민호가 아니라면 추천인에게 남은 돈을 주고 위와 같이 다시 반복한다.

코드

def solution(enroll, referral, seller, amount):
    parent = dict(zip(enroll, referral))
    answer = dict(zip(enroll, [0 for _ in range(len(enroll))]))

    # 반복문을 통해 판매원을 확인
    for i in range(len(seller)):
        money = amount[i] * 100 # 판매수량 * 100
        target = seller[i] # 조직 구성원(현재 판매원)

        # 반복문을 통해 판매원의 추천인을 확인
        while True:
            # 현재 판매금액이 10원보다 작다면 현재 조직 구성원에게 돈을 다 주고 반복을 멈춘다.
            if money < 10:
                answer[target] += money
                break

            # 현재 판매금액이 10원보다 크다면
            else:
                # 10%를 제외하고 현재 조직 구서원에게 돈을 준다.
                send = money // 10
                mine = money - send
                answer[target] += mine

                # 현재 조직 구성원의 추천인이 민호라면 반복을 멈춘다.
                if parent[target] == "-":
                    break

                # 현재 조직 구서원의 추천인이 민호가 아니라면 추천인에게 남은돈을 준다.
                money = send
                target = parent[target]

    # list형식으로 answer의 values 값을 출력
    return list(answer.values())

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com