프로그래머스 알고리즘 Level 1 ( 2019 KAKAO BLIND RECRUITMENT 실패율 문제 )

2023. 1. 26. 19:20알고리즘/문제

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

 

프로그래머스

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

programmers.co.kr

풀이 - 성공

class Solution {
    fun solution(N: Int, stages: IntArray): IntArray {
        var answer = intArrayOf()
        val failureRateList = mutableListOf<Double>()

        for (i in 1..N) {
            if (stages.count { it >= i } == 0) {
                failureRateList.add(0.0)
            } else {
                val rate = (stages.count { it == i }.toDouble() / stages.count { it >= i }.toDouble())
                failureRateList.add(rate)
            }
        }

        answer = failureRateList
            .withIndex()
            .asSequence()
            .sortedByDescending { it.value }
            .groupBy { it.value }.values
            .map { it.map { it.index + 1 }.sorted() }
            .flatten().toIntArray()

        return answer
    }
}

한번에 성공을 못했는데 그 이유가 실패율을 구할때 분모가 0이 되는 경우가 있어서였다.

실패율을 구하는 스테이지의 수가 사람들의 스테이지 최대값보다 큰 경우 

예를 들어 N = 7  stages = ( 5,5,5,5,5 ) 의 경우 6번 스테이지와 7번 스테이지는 0/0으로 나누기때문에 불가능

그래서 처음에 실패율을 구할때 분기를 주고 구했습니다.

실패율을 구하고 

나머지 과정은 함수형으로 구했습니다.