Kotlin/Kotlin 알고리즘

백준 18110번 solved.ac Kotlin 구현해 보기

kimc 2023. 10. 8. 00:44
반응형

```

백준 18110번 solved.ac Kotlin 구현해 보기

```

Kimc Kotlin Study

배워갈 내용

  1. 백준 18110번 풀이

문제 링크

https://www.acmicpc.net/problem/18110

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net

문제 설명

백준 18110번 solved.ac은

난이도 실버등급의 문제로서

 

난이도의 개수 n이 주어지고

n만큼 점수 의견이 주어지면

의견의 리스트에서

위에서 15프로

아래에서 15프로 

높고 낮은 값들을 반올림하고 빼고

평균을 구해서 반올림한다음 출력해 주면 됩니다.

 


30분 정도 위에 링크를 방문하셔서 풀어보시고

안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.


코드 설명

 

입력을 받고
정해진 조건에 맞춰서 계산을 해서 출력해 주면 되는
문제입니다.

 

요즘에는 주석이나 설명 없이 코드로 설명하고자 노력 중입니다
만약 코드가 이해가 안 가시면 댓글 부탁드립니다

 

 

코드

import kotlin.math.roundToInt

fun main() {
    val inputDto = readInput()
    print(inputDto.findScore())
}

data class InputDto(
    val n: Int,
    val opinions: MutableList<Int>
) {
    fun findScore(): Int {
        if (n == 0 || opinions.size == 0) {
            return 0
        }
        return calculateTrimmedMean(opinions, 15.0)
    }

    private fun calculateTrimmedMean(values: List<Int>, trimPercentage: Double): Int {
        if (values.isEmpty() || trimPercentage < 0.0 || trimPercentage >= 50.0) {
            throw IllegalArgumentException("Invalid input")
        }

        val sortedValues = values.sorted()
        val trimSize = (values.size * trimPercentage / 100.0).roundToInt()

        val trimmedValues = sortedValues.subList(trimSize, values.size - trimSize)
        return trimmedValues.average().roundToInt()
    }
}

fun readInput(): InputDto {

    val n = readLine()
        ?.toIntOrNull()
        ?: throw IllegalArgumentException("Invalid n")


    val opinions: MutableList<Int> = ArrayList()

    repeat(n) {
        opinions.add(
            readLine()
                ?.toIntOrNull()
                ?: throw IllegalArgumentException("Invalid opinion")
        )
    }

    return InputDto(n, opinions)
}

// https://codemasterkimc.tistory.com/

 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 


 

반응형