https://www.acmicpc.net/problem/18110
난이도 : 실버 4
태그 : 수학, 구현, 정렬
설명
Solved.ac 의 문제 난이도 계산 방법을 바탕으로 만든 문제인 것 같네요.
솔브드의 난이도 계산 시스템은 극단적인 값으로 인해 평균이 왜곡되는 것을 막기 위해 절사 평균을 사용하는데요.
단순히 의견 개수 * 0.15 (반올림)개 만큼 양극값을 제거하고 평균을 계산하면 됩니다.
소스코드
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val arr = Array(n) { readLine().toInt() }.sorted()
val cutLine = Math.round(n * 0.15).toInt()
var sum = 0
for (i in cutLine until n - cutLine) {
sum += arr[i]
}
println(Math.round(sum.toDouble() / (n - cutLine * 2)).toInt())
}
사실 이 문제 같은 경우는 아이디어와 구현 자체는 금방 했는데요.
계속 틀렸습니다를 받아 뭐지... 싶었는데
알고보니 코틀린의 round 함수는 사사오입이 아닌 오사오입 방식이였습니다.
1.5의 경우 2
2.5의 경우 2
3.5의 경우 4
4.5의 경우 4
이와 같이, 5에서 반올림을 할 경우, 앞자리 숫자가 홀수냐 짝수냐에 다라 내림 올림이 결정되는 것이 오사오입 입니다.
일상에서 흔히 사용하는, 5면 앞자리가 홀수던 짝수던 올림처리하는 방식은 사사오입이라 합니다.
파이썬 역시 오사오입이라 반올림을 처리할 때 애먹었던 기억이 있었는데,
왜 자꾸 틀리나 싶었는데 코틀린의 round 역시 오사오입 이였네요.
결국 java.lang의 Math.round를 갖다 사용하였더니 통과하였습니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 1547번] [Kotlin] 공 (0) | 2023.06.18 |
---|---|
[백준 2589번] [Kotlin] 보물섬 (0) | 2023.06.15 |
[백준 2696번] [Kotlin] 중앙값 구하기 (0) | 2023.06.13 |
[백준 2610번] [Kotlin] 회의준비 (0) | 2023.06.12 |
[백준 2615번] [Kotlin] 오목 (0) | 2023.06.11 |