Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
관리 메뉴

leeyang의 개발 성장기

[kakao] 2018년 코딩테스트 기출 - 실패율 본문

알고리즘

[kakao] 2018년 코딩테스트 기출 - 실패율

leeyang 2019. 9. 3. 17:56

문제

n은 stage 개수

stages은 게임 도달한 사람들의 도달한 stage

그러므로 총 유저 수는 stages array에 count이다.

실패율 : 해당인원수 / 전체인원수

게임이기 때문에 전체 사용자가 10명이라면, 1단계인 사람이 2명이면 2단계에서 전체 사람수는 전체 - 1단계사람수

그러므로 실패율에서 구하는 전체인원수는 전체유저수 - 전단계 사용자수

주의) 나눗셈이기 때문에 0으로 나누면 안된다.


CODE

import Foundation

let N = 4
let stages = [4,4,4,4]

func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    guard N >= 1 && N <= 500 else { return [] }
    var countArray = Array.init(repeating: 0, count: N+2)
    var probabilityArray = Array.init(repeating: (Int(0), Double(0.0)), count: N+1)
    var total = stages.count

    for element in stages.enumerated() {
        countArray[element.element] += 1
    }

    for i in 1...N {
        let value = countArray[i]
        probabilityArray[i] =  total == 0 ? (i, 0) : (i, Double(value) / Double(total))
        total -= value

    }
    probabilityArray = probabilityArray.sorted(by: { (s1, s2) in s1.1 == s2.1 ? s1.0 < s2.0 : s1.1 > s2.1 })

    var resultArray = [Int]()
    for element in probabilityArray {
        if element.0 == 0 {
            continue
        }
        resultArray.append(element.0)
    }
    return resultArray
}

예외처리에서 아직 많은 어려움이 있다.

N의 가능한 범위와 나눗셈 0에 주의하자

Comments