[백준] 문자 인식 (3448)(kotlin)
문제 설명
입력 및 출력
» 입력
입력은 N개의 테스트 케이스로 구성되어 있다. 첫째 줄에 테스트 케이스의 개수 N이 주어진다. 각 테스트 케이스는 적어도 한 줄이고, 인식하지 못한 문자는 ‘#’로 표시한다. 각 테스트 케이스의 다음에는 빈 줄이 한 칸씩 있다. 각 줄은 100글자를 넘지 않고, 줄의 수도 200줄을 넘지 않는다.
» 출력
각 테스트 케이스에 대해서 인식률을 계산한 뒤 다음과 같이 출력한다. 각 줄은 “Efficiency ratio is X%.”와 같은 형태로 출력해야 한다. X는 인식률을 퍼센트로 표시한 것이고, 소수점 두자리 이상인 경우에는 둘째 자리에서 반올림해서 출력한다. 단, 반올림 결과가 정수이면 정수 부분만 출력한다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
3 Pr#nt ex##tly one##ine for#eac# te#t c#se. None. The i#put consists of N test ca#es. The number of th#m (N) is given on the first #ine of the#input#file. |
Efficiency ratio is 78.6%. Efficiency ratio is 100%. Efficiency ratio is 94%. |
문제 풀이1
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val N = readLine().toInt()
repeat(N) {
var totalChar = 0
var unrecognizedChar = 0
while (true) {
val str = readLine()
if (str.isNullOrEmpty()) break
totalChar += str.length
unrecognizedChar += str.count { it == '#' }
}
val ratio = (totalChar.toDouble() - unrecognizedChar) / totalChar.toDouble() * 100.0
val ratioRound = "%.1f".format(ratio)
val ratioRoundToInt = ratioRound.toDouble().toInt()
println(
"Efficiency ratio is " +
if (ratioRound != "$ratioRoundToInt.0") "%.1f".format(ratio)
else { "${ratioRoundToInt}" } + "%."
)
}
}
// println("%.1f".format(99.95f)) -> "99.9"
// println("%.1f".format(99.95)) -> "100.0"