[Programmers] Lv.1 - 실패율 (Kotlin)

Dohyeon Ko·2021년 10월 9일
0

Programmers

목록 보기
3/8
post-thumbnail

문제 링크

문제 링크

문제 설명

풀이 언어

Kotlin

풀이 방법

간단한 탐색 문제이다. stages 에는 user의 현재 위치가 주어진다. 만약 값이 2인 경우 현재 stage2 를 해결하지 못하고 있는 상태이다. 나는 아래와 같은 방법으로 해결했다.

  • stage 별로 count를 한다. 이후 저장된 count로 실패율을 계산한다.

  • 해당 stage에서 대기하고 있는 유저가 없는 경우 실패율은 0.

  • 해당 stage에서 대기하고 있는 유저가 있는 경우 실패율은 해당 stage 유저 / 전체 유저.

  • 따라서 stage 1부터 실패율을 계산하되 stage를 넘어갈 때마다 전체 유저 - 해당 stage 대기 유저 수 를 해준다.

  • 위 과정이 종료되면 key : stage - value : ratio(실패율) 로 저장되어 있다. 이후 value의 내림차순으로 정렬하면 해결.

결과

코드

class Solution {
    fun solution(N: Int, stages: IntArray): IntArray {
        var answer = intArrayOf()
        var onStage = mutableMapOf<Int, Int>()
        var ratio  = mutableMapOf<Int, Double>()
        
        for (i in 1..N) {
            onStage[i] = 0
        }
        
        for (e in stages.iterator()) {
            if (e <= N) {
                onStage[e] = onStage.getValue(e) + 1
            }
        }
        
        for (i in 1..N) {
            ratio[i] = 0.0
        }
        
        var total = stages.size
        for (i in 1..N) {
            if (onStage[i] != 0) {
                ratio[i] = onStage.getValue(i) / total.toDouble()
                total -= onStage.getValue(i)   
            }
        }
        
        var mapToList = ratio.toList()
        mapToList = mapToList.sortedByDescending {it.second}
        
        for (e in mapToList.iterator()) {
            answer = answer.plus(e.first)
        }
        
        return answer
    }
}

알게 된 점

  • 파이썬에 적응해버린 나 자신... 요런 구조의 map 사용이 익숙하지 않다. 더 열심히 연습해야겠다.

  • key에 새로운 value를 할당할 때는 key = value 가능하다. 하지만 value에 참조할 때는 map.getValue(key) 이런 식으로 접근해야한다. 주의!

  • C++이나 java와 마찬가지로 List<Pair<a, b>> 인 경우에 element.first , element.second 이런 식으로 접근해야 한다. 역시 주의!! 이것도 역시 파이썬에 적응해버려서 이런 방법이 익숙치 않다.

profile
티스토리로 옮겼어요! (https://codekodo.tistory.com)

0개의 댓글