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

728x90

문제

이해

  • 실패율 : 스테이지에 도달, but 클리어 하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
    스테이지에 도달한 유저가 없을 경우 실패율 0

  • N = 전체 스테이지의 갯수

  • stage = 사용자가 멈춰있는 스테이지의 번호가 담긴 배열

  • Return -> 실패율이 높은 스테이지부터 내림차순 배열


접근

  • 2개의 Map 작성
    1. 스테이지, 사람수
    2. 스테이지, 실패율
  • 내림차순 정리
  • answer 도출

풀이

class Solution {
    fun solution(N: Int, stages: IntArray): IntArray {
        var answer = IntArray(N)

        val indexMap: MutableMap<Int, Int> = mutableMapOf() // 스테이지, 사람수
        val failureMap: MutableMap<Int, Double> = mutableMapOf() // 스테이지, 실패율

        // indexMap = (스테지이지, 멈춰있는 사람 수)
        stages.forEach {
            when (indexMap.containsKey(it)) {
                true -> indexMap[it] = indexMap.getValue(it) + 1
                false -> indexMap[it] = 1
            }
        }

        var totalSize = stages.size

        // failureMap = (스테이지, 실패율)
        for (i in 1..N) {
            when (indexMap.containsKey(i)) {
                true -> {
                    failureMap[i] = (indexMap.getValue(i) / totalSize.toDouble())
                    totalSize -= indexMap.getValue(i)
                }
                false -> failureMap[i] = 0.0
            }
        }

        val list = failureMap.toList().sortedByDescending { (_, value) ->
            value
        }

        for (i in 0 until N) {
            answer[i] = list[i].first
        }

        return answer
    }
}
728x90

댓글

Designed by JB FACTORY