Uknow's Lab.
article thumbnail

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

 

2592번: 대표값

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50의 평균은

www.acmicpc.net

 

난이도 : 브론즈 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)을 출력한다. 라는 의미입니다.

 

 

후기

자바와 코틀린의 자료구조 중에는 신기한게 많은 것 같습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.