문제
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
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
'CodingTest > Programers' 카테고리의 다른 글
[programers] 프로그래머스(파이썬) : 소수 만들기 (0) | 2022.04.24 |
---|---|
[programers] 프로그래머스(파이썬) : 신고 결과 받기 (0) | 2022.04.23 |
[programers] 프로그래머스 카카오(파이썬) : [1차] 다트 게임 (0) | 2022.01.14 |
[programers] 프로그래머스 카카오(파이썬) : [3차] n진수 게임 (0) | 2022.01.07 |
[programers] 프로그래머스 카카오(파이썬) : [1차] 비밀지도 (0) | 2022.01.06 |