https://www.acmicpc.net/problem/2592
난이도 : 브론즈 2
태그 : 수학, 구현
설명
10개의 정수가 주어졌을 때, 평균과 최빈값(가장 많이 나온 값)을 출력하는 문제입니다.
사실 큰 고민없이 풀 수 있는 문제지만,
코틀린의 내장 기능을 사용해서 최빈값을 간단하게 구할 수는 없나? 하는 마음에 좀 찾아봤는데,
Grouping이라는, 처음보는 클래스를 발견했습니다.
이름처럼, 리스트를 특정 기준에 따라 그룹화 하는 용도로 쓰이는데요.
각 값들을 기준으로 그룹화하고, 가장 많이 등장한 숫자를 찾아, 해당 숫자를 출력합니다.
소스코드
fun main() = with(System.`in`.bufferedReader()) {
val arr = Array(10) { readLine().toInt() }
// 최빈값
val mode = arr.groupingBy { it }.eachCount().maxByOrNull { it.value }!!.key
// 평균
val avg = arr.average().toInt()
println(avg)
println(mode)
}
groupingBy { it } 을 기준으로 값을 기준으로 Grouping,
eachCount()를 통해 각 그룹의 값을 카운트,
그러고 나서 maxByOrNull { it.value }를 통해 값을 기준으로 가장 큰 값을 찾아,
그 키 값(key)을 출력한다. 라는 의미입니다.
후기
자바와 코틀린의 자료구조 중에는 신기한게 많은 것 같습니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 24309번] [Kotlin] РАВЕНСТВО (0) | 2023.02.22 |
---|---|
[백준 2042번] [Kotlin] 구간 합 구하기 (0) | 2023.02.21 |
[백준 10039번] [Kotlin] 평균 점수 (0) | 2023.02.17 |
[백준 4470번] [Kotlin] 줄번호 (0) | 2023.02.17 |
[백준 2110번] [Kotlin] 공유기 설치 (1) | 2023.02.17 |