Problem From.
https://leetcode.com/problems/top-k-frequent-words/
오늘 문제는 여러 함수들을 적절하게 활용하면 쉽게 풀리는 문제였다.
주어진 리스트에서 각각이 몇개가 되는지 센다음, 중복된 갯수가 많은 단어부터 K 개 만큼 반환하는 문제였다.
코드를 먼저 보자
class Solution {
fun topKFrequent(words: Array<String>, k: Int): List<String> {
return words.groupingBy { it }.eachCount()
.toList()
.sortedBy { (s, _) -> s }
.sortedByDescending { (_, v) -> v }
.map { it.first }
.take(k)
}
}
먼저, groupingBy 함수와 .eachCount() 를 써서 리스트안에 단어를 key 로 하고 중복된 갯수를 value 로 하여 묶었다.
sortedBy (s,) 를 통해 사전순으로 나열한 뒤,
sortedBy (,v) 를 통해 중복된 갯수의 내림차순으로 정렬하였다.
map {it.first} 를 통해 key 값만 가져오며 .take(k) 를 통해 k 개 만큼만 가져오도록 하였다.
문제 풀이에 있어서 여러 함수를 적절히 잘 활용하는 능력도 중요한 것 같다.