swift 실패율

quokka·2022년 3월 20일
0

코딩테스트

목록 보기
39/63

https://programmers.co.kr/learn/courses/30/lessons/42889

func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    var count = stages.count
    //1) 도달한 스테이지의 배열이 담긴 stages를 Dictionary [도달한 스테이지: 사용자 수 ] 형태로 변경후 오름차순 정렬을 해준다.
    let stagesCountDictionary = stages.reduce(into: [:]) { $0[$1, default: 0] += 1 }.sorted { $0.key < $1.key }
    var failureToAcquisitionRateDictionary = [Int: Double]()
    for (i,v) in stagesCountDictionary {
        if i <= N { // 2) N(마지막 스테이지)값과 i(Dictionary의 key)값이 같거나 작다면 실패율을 구해준다. N(마지막 스테이지)을 넘어간 스테이지 실패율은 구해줄필요가 없다. 
            let failureToAcquisitionRate = Double(v) / Double(count)
            failureToAcquisitionRateDictionary.updateValue(failureToAcquisitionRate, forKey: i)
        }
        count -= v // 지금 스테이지까지만 있는 사용자수를 빼준다.
    }
    
    for i in 1...N {
        if !failureToAcquisitionRateDictionary.keys.contains(i) { // stages배열에 i가 나타나지 않았다면 그곳은 실패율이 0인곳이다.
            failureToAcquisitionRateDictionary.updateValue(0, forKey: i) 
        }
    }
    
    let result = failureToAcquisitionRateDictionary
        .sorted {
            if $0.value == $1.value {
                return $0.key < $1.key // key값을 기준으로 정렬
            } else {
            return $0.value > $1.value } // value값을 기준으로 정렬
        }
        .map { $0.key }
    return result
}
profile
iOS를 공부하는 개발자입니다~ㅎㅎ

0개의 댓글

관련 채용 정보