[백준] 2108번: 통계학

kldaji·2021년 10월 2일
0

백준문제풀이

목록 보기
1/35
post-custom-banner

문제

https://www.acmicpc.net/problem/2108

풀이

  1. 숫자 리스트 입력 받기
  2. 평균 계산
  3. 중간값 계산
  4. Map 을 사용한 빈도수 계산
  5. 최댓값 - 최솟값 계산
import kotlin.math.roundToInt

fun getAverage(numberList: MutableList<Int>): Int = numberList.average().roundToInt()

fun getMid(numberList: MutableList<Int>): Int {
    val sortedList = numberList.sorted()
    val mid = numberList.size / 2
    return sortedList[mid]
}

fun getFreq(numberList: MutableList<Int>): Int {
    val freqMap = numberList.groupingBy { it }.eachCount()
    val maxValue = freqMap.maxOf { it.value }
    val maxFreqMap = freqMap.filter { it.value == maxValue }
    val mapKeys = maxFreqMap.keys.sorted()
    return if (mapKeys.size == 1) {
        mapKeys.first()
    } else {
        mapKeys[1]
    }
}

fun getRange(numberList: MutableList<Int>): Int {
    val maxValue = numberList.maxOf { it }
    val minValue = numberList.minOf { it }
    return maxValue - minValue
}

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()
    val n = br.readLine().toInt()
    val numberList = mutableListOf<Int>()
    repeat(n) {
        numberList.add(br.readLine().toInt())
    }
    bw.write("${getAverage(numberList)}\n")
    bw.write("${getMid(numberList)}\n")
    bw.write("${getFreq(numberList)}\n")
    bw.write("${getRange(numberList)}\n")
    bw.close()
    br.close()
}

더 좋은 풀이 방법 댓글로 달아주세요!!!

profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.
post-custom-banner

0개의 댓글