[Programmers] Lv.1 - 실패율 (Kotlin)
문제 링크
문제 설명
풀이 언어
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
이런 식으로 접근해야 한다. 역시 주의!! 이것도 역시 파이썬에 적응해버려서 이런 방법이 익숙치 않다.
Author And Source
이 문제에 관하여([Programmers] Lv.1 - 실패율 (Kotlin)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@k906506/Programmers-Lv1.-실패율-Kotlin저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)