import java.io.*
import java.util.*
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val arr = IntArray(1_001)
var testCase = br.readLine().toInt()
var sum: Double
var eveRage: Double
var sumCnt: Double
var d: Double
for ( i in 1..testCase) {
sum = 0.0
eveRage = 0.0
sumCnt = 0.0
d = 0.0
val str2 = StringTokenizer(br.readLine())
//입력값 배열 저장
var i:Int = 0
while (str2.hasMoreTokens()) {
arr[i] = str2.nextToken().toInt()
i++
}
//평균구하기
for ( i in 1..arr[0]) {
sum += arr[i]
eveRage = sum / arr[0]
}
//학생 비율
for ( i in 1..arr[0]) {
if ( arr[i] > eveRage)
sumCnt += 1
}
d = sumCnt / arr[0] * 100
bw.write("%.3f".format(d)+"%\n")//소수점 3자리
bw.flush()
}
bw.close()
}
단계6(배열) 마지막문제인 4344번입니다.
코드가 엄~청 길죠?? 분명 단축하는 방법은 있을텐데
아직 배우는 중이라서 공부를 더 하고 코드 다이어트 좀 해봐야겠어요
갈 수록 어려워지네요... 포기하지말아야지
추가-
import java.io.*
import java.util.*
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val arr = IntArray(1_001)
var arr2: List<Int>
var arr3: List<Int>
var testCase = br.readLine().toInt()
var aveRage = 0.0
var sumCnt: Double
var d: Double
for ( i in 0 until testCase) {
val str2 = StringTokenizer(br.readLine())
//입력값 배열 저장
var i:Int = 0
while (str2.hasMoreTokens()) {
arr[i] = str2.nextToken().toInt()
i++
}
arr2 = arr.slice(listOf(0)) //맨 앞 요소만 가져오기
arr3 = arr.take(arr2[0]+1).drop(1)//학생들 점수만 가져오기
//평균구하기
aveRage = arr3.average()
//학생 비율
sumCnt = arr3.count { it > aveRage}.toDouble()
d = sumCnt / arr3.count() * 100
bw.write("%.3f".format(d)+"%\n")//소수점 3자리
bw.flush()
}
bw.close()
}
이번에는 가능한 반복문을 없애고 라이브러리 활용위주로 해보았는데
채점시간이 더 오래걸리네요
작은 데이터 색에는 반목문이 더 빠른 것 같아요. 아닌가?
반응형
'알고리즘 > 백준문제' 카테고리의 다른 글
백준 단계9 1011번 문제 코틀린 (0) | 2020.05.13 |
---|---|
백준 단계7 1065번 문제 코틀린 (0) | 2020.05.13 |
백준 단계4 1110번 문제 코틀린 (0) | 2020.05.13 |
백준 단계3 10871번 문제 코틀린 (0) | 2020.05.13 |
백준 단계2 마지막문제 10817번 코틀린 (0) | 2020.05.13 |