달달한 스토리

728x90
반응형

출처 핀터레스트

 

자 문제를 풀어보자.

 

실패율

 

//실패율
class FailureRate {
    fun solution(N: Int, stages: IntArray): IntArray {

        val result: IntArray

        //실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수(notCleardLength) / 스테이지에 도달한 플레이어 수 cleardLength

        //스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수
        var notCleardLength: Int

        //스테이지에 도달한 플레이어 수, 처음은 스테이지 사이즈가 기본 값(전체 문제)
        //소수점 비교를 위해 float 사용
        var cleardLength = stages.size.toFloat()

        //결과 담을 map 만들어주기 //사이즈 초깃값 넣기
        val fRMap = HashMap<Int, Float>()


        (1..N).forEach { cl ->
            //스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수를 구하고,
            notCleardLength = stages.count { stage -> cl == stage }

            // 실패율 구하기
            // 소수점을 비교하기 위해 Float을 사용하고,
            // 소수점 아래 4번째까지 반올림을 하여, 무한으로 나누어져버려 overflow가 생기는 것 방지 ex) pi
            val failureRate = if (notCleardLength != 0) notCleardLength / cleardLength else 0f

            //실패율 맵에 넣어주기
            fRMap[cl] = failureRate

            //스테이지에 도달한 플레이어 수 갱신해주기
            //cleardLength에서 notCleardLength를 빼주어야한다.
            cleardLength -= notCleardLength
        }
        //이제 실패율을 담은 맵을 리스트로 변환후 실패율로 내림차순 정렬뒤 스테이지의 종류를 따로 맵핑하여, intArray로 변환해줍니다.
        result = fRMap.toList().sortedByDescending { it.second }.map { it.first }.toIntArray()

        return result
    }
}

프로그래머스 레벨 1 문제를 거의 풀어가니까

 

문제가 점점 어려워진다.

 

우선 구해야 할 실패율을 알아보자

 

 

실패율 = 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수(notCleardLength) / 스테이지에 도달한 플레이어 수 cleardLength

 

이런 식으로 변수를 정해준다.

 

notCleardLength = stages.count { stage -> cl == stage }

 

위 코드를 통해서 아직 클리어하지 못한 플레이어의 수를 구하고,

 

// 실패율 구하기
// 소수점을 비교하기 위해 Float을 사용하고,
val failureRate = if (notCleardLength != 0) notCleardLength / cleardLength else 0f

 

다음과 같이 실패율을 구한다.

 

아직 클리어하지 못한 플레이어 수가 있다면, 0f를 반환한다.

 

//실패율 맵에 넣어주기
fRMap[cl] = failureRate

 

그 후에 맵에 넣어준다.

 

//스테이지에 도달한 플레이어 수 갱신해주기
//cleardLength에서 notCleardLength를 빼주어야한다.
cleardLength -= notCleardLength

 

스테이지에 도달한 플레이어 수도 다음 계산을 위해 갱신해준다.

 

//이제 실패율을 담은 맵을 리스트로 변환후 실패율로 내림차순 정렬뒤 스테이지의 종류를 따로 맵핑하여, intArray로 변환해줍니다.
result = fRMap.toList().sortedByDescending { it.second }.map { it.first }.toIntArray()

 

위와 같은 코드로 계산하면 완성이다.

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading