leeyang의 개발 성장기
[kakao] 2018년 코딩테스트 기출 - 실패율 본문
문제
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에 주의하자
'알고리즘' 카테고리의 다른 글
[백준] 1018번 체스판 다시 칠하기 (0) | 2022.02.13 |
---|---|
[백준] 10828번 스택 (0) | 2022.02.13 |
[kakao] 2018년 코딩테스트 기출 - 오픈채팅방 (0) | 2019.09.03 |
[백준] 단계별로 풀어보기 - 9단계 1978번 소수 찾기 (0) | 2019.08.29 |
[백준] 단계별로 풀어보기 - 8단계 10250번 ACM 호텔 (0) | 2019.08.29 |
Comments