[Algorithm] 프로그래머스 실패율
Updated:
문제 설명
나의 풀이
import Foundation
func solution(_ N:Int, _ stages:[Int]) -> [Int] {
var dic = [Int: Int]()
for i in 1...N+1 {
dic[i] = 0
}
for count in stages {
dic[count]! += 1
}
var failures = [Int: Double]()
var count = stages.count
for i in 1...N {
if dic[i]! > 0 {
failures[i] = Double(dic[i]!) / Double(count)
count -= dic[i]!
}
if dic[i] == 0 {
failures[i] = 0.0
}
}
let answers = failures.sorted { (first, second) -> Bool in
if first.value > second.value {
return true
}
else if first.value == second.value {
if first.key < second.key {
return true
}
}
return false
}
return answers.map {( $0.key )}
}
정렬을 할 때 sorted 내부에서 1개 이상의 조건을 가지고 정렬을 진행할 수 있다.
괜찮은 남의 풀이
import Foundation
func solution(_ N:Int, _ stages:[Int]) -> [Int] {
var failure: [Int: Float] = [:]
var player: Int = stages.count
for i in 1...N {
let n = stages.filter { $0 == i }.count
failure[i] = Float(n)/Float(player)
player -= n
}
return failure.sorted(by: <).sorted(by: { $0.value > $1.value }).map {$0.key}
}
앞부분의 failure을 구하는 부분이 훨씬 간단하게 구했다.
Leave a comment