이번 문제는 다단계 칫솔 문제이다.
문제 설명이 굉장히 길다... 그리고 다단계 라는 단어에서부터 과연 얼마나 깊게 조직이 이루어 졌을지 걱정부터 앞선다.
민호는 Center에 위치하며, 그 아래에 총 8명의 판매 회원이 존재한다.
8명의 회원 중 총 5명의 회원이 판매 이익을 올렸으며, 내역은 위와 같다.
이제 그림을 통해 민호의 이익금을 확인해보자.
먼저 young 은 총액 1200원 중 90%는 자신이 가지게 되고 그중 10% 인 120원을 edward 에게 준다.
edward는 young에게서 전달받은 120원 중 90%는 자신이 가지고 10% 12원을 mary 에게 준다.
mary 는 edward에게 받은 이익금 12원 중 90%는 자신이 가지고 10% 1원을 center 인 민호에게 전달한다.
그리고 모든 과정을 거친 이익금은 위와 같이 나타낸다.
한가지 tod 의 경우에는 200원의 10%인 20원을 jaimie 에게 전달하고, jaimie 는 20원의 10%인 2원을 받지만, 2원의 10%를 Center에 전달할 수 없기 때문에 2원을 다 가지게 된다. (10%가 1원 미만인 경우에는 분배하지 않는다.)
이제 각 사람이 받는 이익금의 총합을 계산(정수형)하여 전달받은 enroll에 이름이 포한된 순서에 따라 나열하여 반환해야 한다.
제한 사항에 따름녀 민호의 이름은 배열에 주어지지 않는다. 따라서 민호의 추천으로 john 과 mary의 referral 항목은 '-'로 기입된다.
즉 enroll 에는 조직에 포함된 사람, referral 에는 각 enroll[i]를 조직에 추천한 사람의 이름이 seller 에는 판매 이익이 있는 사람이며, amount 는 해당 seller 의 제품 판매 갯수( x 100원) 이 전달 된다.
이 문제에서 한가지 주의할 점은 합산 금액이 아니라는 점이다.
입출력 예 1번에 mary에게서 알 수 있듯이
mary 를 기준으로 밑에 회원들에게 받는 금액은 12 + 2 + 50 + 900(자신이 직접 판매한 금액) 이다.
이를 합산하여 10%를 민호에세 분배하는 것이 아닌, 각 분배 금액의 10%를 계산하여 이를 민호에게 분배한다.
그리고 만약 sam의 판매액이 존재한다면, sam의 판매액의 10를 edward 가 받게 되고, 그 금액의 10%를 mary에게 전달하며, 다시 그 금액의 10%를 계산하여 민호에게 분배한다. 절대 합산으로 계산하면 안된다.
코드는 생각보다 단순하다. 트리를 탐색할 이유도 없고, 그냥 각 판매 케이스별로 금액을 계산하여 해당 index 에 맞춰서 넣어주면 된다.
그리고 넣어준 금액은 다시 전달하는 금액과 추천인으로 변경하여 현재 판매인이 '-' 이 되는 순간까지 while문을 반복하면 된다.
처음에는 각 회원별로 추천인을 다 연결해 주느라 시간초과에 걸렸었다. 하지만 문제의 조건을 생각해보면 굉장히 어리석은 접근법 이였다.
referral[i] 는 enroll[i[의 추천인이 되므로, 굳이 따로 dict를 만들어줄 필요가 없었다.
각 회원의 회원 번호를 부여하고 부여된 번호를 다시 referral[idx]로 활용하면 되는 문제였다.
'프로그래머스 퀴즈(Python) > level 3' 카테고리의 다른 글
23.04.06 파이썬 코딩 퀴즈#210 표 편집(프로그래머스 스쿨) (0) | 2023.04.06 |
---|---|
23.04.05 파이썬 코딩 퀴즈#209 110 옮기기(프로그래머스 스쿨) (0) | 2023.04.05 |
23.03.31 파이썬 코딩 퀴즈#207 모두 0으로 만들기(프로그래머스 스쿨) (0) | 2023.03.31 |
23.03.30 파이썬 코딩 퀴즈#206 카드 짝 맞추기(프로그래머스 스쿨) (0) | 2023.03.30 |
23.03.29 파이썬 코딩 퀴즈#205 광고 삽입(프로그래머스 스쿨) (0) | 2023.03.29 |