- Comparable을 상속하는 Data class를 만들어 sorting 시 우선순위를 지정하였다.
- 다른 사람의 답을 보면 class를 다르게 사용하는 방법이 많이 보인다. kotlin 코드 스타일에 대해 더욱더 공부해야할 것 같다.
class Data(val mStageNum: Int, val mStageFailureRate: Double): Comparable<Data> {
override fun compareTo(other: Data): Int {
return if (this.mStageFailureRate != other.mStageFailureRate) {
if (this.mStageFailureRate > other.mStageFailureRate) -1
else 1
} else {
if (this.mStageNum < other.mStageNum) -1
else 1
}
}
}
fun solution(N: Int, stages: IntArray): IntArray {
val mTotalUser = stages.size.toDouble()
var mFailedCnt = Array<Int>(N + 2){0}
var mResultArray = mutableListOf<Data>()
for (i in stages.indices) {
mFailedCnt[stages[i]]++
}
var mPastUser = 0
for (i in 1 until mFailedCnt.size - 1) {
var mP = mFailedCnt[i] / (mTotalUser - mPastUser)
var mData = if (mP.isNaN()) Data(i, 0.0)
else Data(i, mFailedCnt[i] / (mTotalUser - mPastUser))
mPastUser += mFailedCnt[i]
mResultArray.add(mData)
}
mResultArray.sort()
var mAns = mutableListOf<Int>()
for (i in mResultArray.indices) {
mAns.add(mResultArray[i].mStageNum)
}
return mAns.toIntArray()
}