https://www.acmicpc.net/problem/4344
난이도 : 브론즈 1
태그 : 수학, 사칙연산
설명
예전에 푼 문제였던 것 같은데,
오늘 확인해보니 갑자기 틀렸습니다로 뜨길래 뭔가 했더니, 테스트 케이스가 추가되어 재채점 되었더군요.
코틀린 혹은 파이썬으로 해당 문제를 풀 경우 애로사항 중 하나가 바로 반올림하는 부분일 것 같습니다.
이전에 포스팅했던 내용인 오사오입 방식 때문인데요.
https://uknowblog.tistory.com/338
대충 요약하자면, 2.5를 반올림하면 2, 3.5를 반올림하면 4, 4.5를 반올림하면 5, 5.5를 반올림하면 5와 같이
5를 반올림 할 때, 짝수를 향하도록 반올림을 하는 방법입니다.
소스코드
import java.lang.StringBuilder
import kotlin.math.roundToInt
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
val sb = StringBuilder()
repeat(n) {
val arr = readLine().split(" ").map { it.toInt() }
val avg = (arr.sum() - arr[0]) / arr[0]
var count = 0
for (i in 1..arr[0]) {
if (arr[i] > avg) count++
}
sb.append("${String.format("%.3f", (count.toDouble() / arr[0] * 100000.0).roundToInt() / 1000.0)}%\n")
}
print(sb)
}
코틀린의 roundToInt는 사사오입 방식으로 반올림을 할 때 쓰이지만,
소숫점 몇 번째 자리에서 반올림하는게 아니라,
소숫점 첫 번째 자리에서 반올림하여 Int(혹은 Long)으로 만들기에,
사사오입을 위해 roundToInt를 사용하면서, 소숫점 4번째 자리에서 반올림하기 위해
1000을 곱한 뒤 반올림하여 다시 1000으로 나누었습니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 5214번] [Kotlin] 환승 (2) | 2023.06.24 |
---|---|
[백준 1240번] [Kotlin] 노드사이의 거리 (0) | 2023.06.22 |
[백준 2573번] [Kotlin] 빙산 (0) | 2023.06.21 |
[백준 2309번] [Kotlin] 일곱 난쟁이 (0) | 2023.06.18 |
[백준 1547번] [Kotlin] 공 (0) | 2023.06.18 |