-
[백준] 18110번: solved.ac - 코틀린(kotlin)알고리즘/백준 2023. 10. 2. 00:01
https://www.acmicpc.net/problem/18110
문제해석
난이도의 평균을 구하는 문제이지만 의견이 없을 경우 예외처리와, 30% 절사평균에 대한 고려를 수행해야 합니다.
이때 항상 반올림을 수행하므로 반올림도 잘 수행해야 합니다.
예제 입력 1 복사
5 1 5 5 7 8
예제 출력 1 복사
6
5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.
코드
import kotlin.math.roundToInt fun main() { println(`18110 solvedac`()) } fun `18110 solvedac`(): Int{ val opinionCount = readln().toInt() val problemDifficultyOpinions = mutableListOf<Int>() repeat(opinionCount){ problemDifficultyOpinions.add(readln().toInt()) } if(opinionCount == 0){ return 0 } val `절사평균값` = (opinionCount.toDouble() * 0.15).roundToInt() problemDifficultyOpinions.sort() return problemDifficultyOpinions.subList(`절사평균값`, opinionCount - `절사평균값`) .toList() .average() .roundToInt() }
의견의 수만큼 입력을 받습니다.
이때 의견이 0개이면 난이도를 0으로 반환합니다.
절사평균값을 위해서 0.15를 곱하여 rountToInt 함수를 사용하여 반올림까지 수행합니다.
이후에는 list의 sort함수로 정렬을 수행하고, subList를 통해 절사평균값만큼을 제외하여 리스트를 구성 그리고 평균을 구하고 반올림을 구하는 일을 수행합니다.
코틀린에서 다양한 메서드를 제공해 주어 편하게 구현할 수 있었습니다.
다른 분들의 코드
val cut = (num*0.15 + 0.5).toInt() var sum = 0.0 for(i in cut until num - cut) { sum += arr[i] } val ans = (sum/(num-2*cut) + 0.5).toInt()
rountToInt를 활용하는 대신, 0.5를 의도적으로 더하여 Int를 활용함
subList대신에 반복문을 절사평균값만큼 제외하고 sum을 수행합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 27866번: 문자와 문자열 - 코틀린(Kotlin) (0) 2023.10.01 [백준] 1654번: 랜선 자르기 - 코틀린(kotlin) (0) 2022.11.13 [백준] 2805번: 나무 자르기 - 코틀린(kotlin) (0) 2022.11.12 [백준] 1874번 : 스택 수열 - 코틀린(kotlin) (0) 2022.11.10 [백준] 4949번: 균형잡힌 세상 - 코틀린(kotlin) (0) 2022.11.09