Swift랑 친해지기/programmers 풀기

[프로그래머스] 실패율 (Swift)

데브킹덕 2022. 10. 9. 17:43

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

변수,상수 정리

sortedStages - stages를 내림차순으로 정렬

array - stage별 실패하는 인원 수 

dic - key 값은 level,  value 값은 실패한 인원 수 

level - 각 stage마다 실패한 인원 수

people - 도전한 사람 수 

sorteddic - dic 딕셔너리의 key를 내림차순으로 정렬하고, value를 오름차순으로 정렬한 딕셔너리 

result = sorteddic의 key값을 매핑하여 Int형 배열에 담음 

 

 

import Foundation

func solution(_ N:Int, _ stages:[Int]) -> [Int] {


    var sortedStages = stages.sorted(by: <)
    var array = [Int]()
    var dic: [Int:Double] = [:]

    for i in 1...N{
        var level = 0
        for j in 0..<sortedStages.count{
            if i == sortedStages[j] { 
                level += 1
            } //level과 stage가 일치하면 level +1
        }
        if level == 0 {            //array의 인덱스에 맞게 멈춰 있는인원을 맞추기위해 level이 0일 경우 0추가 
            array.append(0)
        }else{
            array.append(level)   //아닐경우 level(멈춰있는 인원 추가)
        }
    }

    var people = stages.count      
    for i in 0..<array.count{
        dic[i+1] = (Double(array[i]) / Double(people))   
        people -= array[i]
    }
    //dic key값에 단계, value에 실패율추가, people은 단계가 지날수록 전단계 인원들을 빼야함
    
    let sorteddic = dic.sorted(by: <).sorted(by: {$0.value > $1.value})
    
    //key 내림차순정렬 , value 오름차순 정렬 

    let result = sorteddic.map({$0.key})
    
    //key값만 매핑하여 Int형 배열에  담음
    return result
}

 

 

어마어마하게 비효율적이지만 통과..