본문 바로가기
알고리즘

[Swift] 프로그래머스 - 다단계 칫솔 판매

by 고고 2022. 2. 11.

문제: https://programmers.co.kr/learn/courses/30/lessons/77486

 

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

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

programmers.co.kr

 

 

1. 부모 딕셔너리 만들어서 계속 부모를 찾으며 올라갈 수 있게 하였습니다.

2. 벌어들인 돈은 [이름: 금액] 딕셔너리로 관리하였습니다.

3. 금액의 10%가 1원이 안되면 == 9원 이하면 부모에게 줄 돈이 없으므로 break로 나가게 하였습니다.

import Foundation

func solution(_ enroll:[String], _ referral:[String], _ seller:[String], _ amount:[Int]) -> [Int] {
    var parents = [String: String]()
    var costs = [String: Int]()
    parents["-"] = ""
    
    for i in 0..<referral.count {
        parents[enroll[i]] = referral[i]
        costs[enroll[i]] = 0
    }
    
    for i in 0..<seller.count {
        var person = seller[i]
        var cost = amount[i] * 100
        
        while parents[person] != "" { // 맨위까지 올라갈때까징
            costs[person]! += cost - cost / 10
            if cost <= 9 {
                break
            }
            
            cost /= 10
            person = parents[person]!
        }
    }
    
    var result = [Int]()
    
    for i in 0..<enroll.count {
        result.append(costs[enroll[i]]!)
    }
    
    return result
}

solution(["john", "mary", "edward", "sam", "emily", "jaimie", "tod", "young"], ["-", "-", "mary", "edward", "mary", "mary", "jaimie", "edward"], ["young", "john", "tod", "emily", "mary"], [12, 4, 2, 5, 10]) // [360, 958, 108, 0, 450, 18, 180, 1080]

댓글