[프로그래머스]실패율(Kakao BLIND RECRUITMENT)

송훈기·2022년 1월 16일
0

Algorithm

목록 보기
6/7

문제

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

풀이

문제 자체는 굉장히 심플했다. Map을 얼마나 자유자재로 사용하는가에 대해서 묻는 질문 같았다.(정작 나도 제대로 못 사용하고 있다;;;)

  • 스테이지, 현재 멈춰있는 유저의 수를 담아줄 Map
  • 스테이지, 실패율을 담아두는 Map

이렇게 2개를 활용해서 문제를 해결했다.
고민했던 부분은 분수를 어떻게 표현할까였는데, Kotlin의 기초적인 것을 까먹은거 같아서 굉장히 자괴감이 많이 들었던 문제다...

코드

fun solution(N : Int, stages: IntArray) : IntArray {
        var answer = IntArray(N)
        val m1 = mutableMapOf<Int,Int>() // 스테이지 번호, 현재 멈춰있는 유저 수
        val m2 = mutableMapOf<Int,Double>() // 스테이지, 실패율

        stages.forEach {
            if(m1.containsKey(it)) {
                m1[it] = m1.getValue(it) + 1
            } else {
                m1[it] = 1
            }
        }

        var users = stages.size

        for(i in 1..N) {
            if(m1.containsKey(i)){
                m2[i] = (m1.getValue(i) / users.toDouble()) // 분수 표현식이네요
                users -= m1.getValue(i)
            } else {
                m2[i] = 0.0
            }
        }

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

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

        return answer
    }

느낀점

분수를 표현하는 방법을 까먹지 말자...;;;
문제 푸는 것에 급급해서 가끔 자료형을 까먹거나 놓치는 경우가 많은거 같다. 이 점 유의해야할 거 같다.

profile
안녕하세요 송훈기입니다.

0개의 댓글