프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 요약
민호는 다단계 칫솔을 판매함
판매원이 칫솔 판매
이익이 피라미드 조직을 타고 조금씩 분배
어느정도 판매가 이뤄진 후
누가 얼마만큼의 이득을 가져갔는지 궁금
이 경우 민호가 center
파란색은 여덟명의 판매원
각각은 자신을 조직에 참여시킨 추천인에 연결
조직의 이익분배 규칙
모든 판매원은 이익의 10% 계산해 추천인에게 배분
나머지는 자신이 가짐
모든 판매원은 자신이 조직에 추천하여 가입시킨 판애원에게서 발생하는 이익의 10%까지 자신의 이익이 됨
자신의 이익 또한 자신의 추천인에게 분배
단 10% 계산 시 원 단위에서 절사
10%를 계산한 금액이 1원 미만인 경우 이득 분배하지 않음
칫솔 이익은 개당 100원
예시
판매원 | 판매 수량 | 이익금 |
young | 12 | 1,200 원 |
john | 4 | 400 원 |
tod | 2 | 200 원 |
emily | 5 | 500 원 |
mary | 10 | 1,000 원 |
위의 표를 살펴보자
[1,200원 이익 발생한 판매원 young 의 경우 ]
young은 1200원 이익 발생
이익의 10%에 해당하는 120원
- 자신을 조직에 참여 시킨 edward에게 120원 배분
- 나머지 1,080원은 자신이 가짐
edward는 young에게 받은 120원 이익발생
이익의 10%에 해당하는 12원
- 추천인 mary에게 12원 배분
- 나머지 108원 자신이 가짐
mary는 edward에게 받은 12원 이익 발생
이익의 10%에 해당하는 1원
- 추천인 center(민호)에게 배분
- 나머지 11원 자신이 가짐
[400원 이익이 발생한 john의 경우]
[200원 이익이 발생한 tod의 경우]
tod은 200원 이익 발생
이익의 10%에 해당하는 20원
- 추천인 jaimie에게 20원 배분
- 나머지 180원 자신이 가짐
jaimie는 tod에게 받은 20원 이익발생
이익의 10%에 해당하는 2원
- 추천인 mary에게 2원 배분
- 나머지 18원 자신이 가짐
mary는 jaimie에게 받은 2원 이익 발생
2원의 10%는 원 단위에서 절사하면 배분할 금액이 없으므로 mary는 2원을 모두 가진다
[500원 이익이 발생한 emily의 경우]
[1000원 이익이 발생한 mary의 경우]
조직 구성원들의 이익 달성 현황 집계는 아래와 같다
이 결과가 민호가 파악하고자 하는 이익 배분 현황
목표
각 판매원이 득한 이익금을 나열한 배열을 return 하도록 solution 함수를 완성
판매원에게 배분된 이익금의 총합을 정수형으로 계산하여
입력으로 주어진 enroll에 이름이 포함된 순서에 따라 나열
매개변수
매개변수 | 설명 |
enroll | 각 판매원의 이름을 담은 배열 |
referral | 각 판매원을 다단계 조직에 참여시킨 다른 판매원의 이름을 담은 배열 |
seller | 판매량 집계 데이터의 판매원 이름을 나열한 배열 |
amount | 판매량 집계 데이터의 판매 수량을 나열한 배열 |
제한사항
매개변수 | 제한 사항 | 설명 |
enroll | 길이: 1 이상 10,000 이하 | - 민호의 이름은 포함되지 않음- 민호를 제외한 조직 구성원의 총 수 |
이름 형식 | - 10글자 이내의 영문 알파벳 소문자로만 구성 | |
순서 | - 조직에 참여한 순서대로 나열됨 | |
referral | 길이: enroll의 길이와 동일 | |
내용 | - i번째 요소는 enroll의 i번째 판매원을 조직에 참여시킨 사람의 이름 | |
추천인 없는 경우 | - "-"로 표시 (예: john, mary) | |
순서 보장 | - i번째 판매원의 추천인(referral[i])은 enroll의 j번째(j < i)에 반드시 먼저 등장 | |
seller | 길이: 1 이상 100,000 이하 | |
내용 | - i번째 요소는 i번째 판매 집계 데이터의 판매원 이름 | |
중복 | - 동일한 이름이 중복해서 포함될 수 있음 | |
amount | 길이: seller의 길이와 동일 | |
내용 | - i번째 요소는 i번째 판매 집계 데이터의 판매량 | |
범위 | - 각 요소는 1 이상 100 이하의 자연수 | |
기타 | 칫솔 판매 이익 | - 한 개당 100원 |
해결방안
각각의 판매원의 추천인을 알아야겠다
각 판매원의 추천인이 누구인지 담은 parent Object를 만들어야겠다 (enroll, referral 사용)
각 판매원의 총 이익을 담을 total Object를 만들고
seller를 순회하면서 각 판매원의 총 이익을 total에 넣어주자