https://programmers.co.kr/learn/courses/30/lessons/77486
코딩테스트 연습 - 다단계 칫솔 판매
민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,
programmers.co.kr
[난이도] level3
[유형] 트리
[풀이]
칫솔 판매원(Leaf)부터 추천인을 거슬러 올라가면서 본인은 10%만큼, 추천인에게는 90%만큼 이익을 분배하면 됩니다.
전체 사람의 이름을 index로 매핑 시키면 쉽게 추천인을 찾을 수 있으므로 <String,Int> 타입의 맵을 선언하여
이름과 index를 매핑 하였습니다.
lateinit var answer:IntArray
lateinit var referral:Array<String>
var table = hashMapOf<String,Int>()
fun sol(name:String,v:Int){
if(name=="-" || v==0) return
var a = 0
if(v%10!=0) a=1
answer[table[name]!!]+=(0.9*v).toInt()+a
sol(referral[table[name]!!],(0.1*v).toInt())
}
class Solution {
fun solution(enroll: Array<String>, _referral: Array<String>, seller: Array<String>, amount: IntArray): IntArray {
referral = _referral
answer = IntArray(enroll.size)
for(i in enroll.indices) table[enroll[i]]=i
for(i in seller.indices) sol(seller[i],amount[i]*100)
return answer
}
}
https://github.com/has2/Problem-Solving/blob/master/programmers/level3/다단계_칫솔_판매.cpp
'Problem-Solving > Programmers' 카테고리의 다른 글
[프로그래머스][level3] 카드 짝 맞추기 (C++) (0) | 2021.08.15 |
---|---|
[프로그래머스][level3] 모두 0으로 만들기 (Kotlin) (0) | 2021.08.15 |
[프로그래머스][level3] 기둥과 보 설치 (Kotlin) (0) | 2021.08.15 |
[프로그래머스][level3] 합승 택시 요금 (Kotlin) (0) | 2021.08.15 |
[Codeforces][Round #736][Div.2] A : Gregor and Cryptography (0) | 2021.08.06 |