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()
}

이번에는 가능한 반복문을 없애고 라이브러리 활용위주로 해보았는데

채점시간이 더 오래걸리네요

작은 데이터 색에는 반목문이 더 빠른 것 같아요. 아닌가?

반응형

+ Recent posts