[TIL] #8 Programmers - Finding the Mode

Yeon·2023년 7월 25일
0
post-thumbnail

Programmers 코딩테스트 연습을 시작했다.
오늘 풀어본 문제는 아래와 같다.
1) 몫 구하기
2) 최빈값 구하기
3) 배열 두 배 만들기

몫 구하기와 배열 두 배 만들기는 나름 이지하게 했는데 최빈값 구하기가 조금 어려웠다😭
내 생각에는 코틀린 함수를 잘 몰라서 그런 것 같아서 기록을 해보려고 한다!!




❓ Question

[문제 설명]
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.


💡 Code

class Solution {
    fun solution(array: IntArray): Int {
        val arr = array.groupBy {it}.entries.sortedByDescending {(key, value) -> value.size}
        return if (arr.size > 1 && arr[0].value.size == arr[1].value.size) -1 else arr[0].key
    }
}

💡 Code Explanation

내 코드에 대해 설명해보자면 아래와 같다.
array를 그룹화하고 value의 리스트 크기를 기준으로 내림차순으로 정렬한 것을 arr에 저장한다.
그리고 이 arr의 크기가 1 이상이고, arr[0]value 크기와 arr[1]value 크기가 같다면 -1을 리턴한다.
그렇지 않다면 arr의 첫번째 인덱스를 리턴한다.


각 부분에 대한 기능이나 의미를 써보자한다.

1. groupBy

  • 컬렉션의 요소들을 특정 기준에 따라 그룹화하는 역할을 함
  • 그룹화된 결과는 Map형태로 반환됨
  • 각 그룹의 Key는 그룹화의 기준이 되는 값이 되고, Value는 해당 그룹에 속하는 요소들의 리스트가 됨
val nums = listOf(1, 5, 3, 2, 1, 2, 2)
val result = nums.groupBy{it}
// result = {1=[1,1], 5=[5], 3=[3], 2=[2,2,2]}

2. entries

  • groupBy 함수를 통해 생성된 그룹된 Map에 대해 사용되는 속성
  • Map의 각 항목을 Pair 형태로 반환하는 속성
    • 각 항목은 Key와 Value로 이루어짐

3. sortedByDescending

  • 컬렉션의 요소를 내림차순으로 정렬
  • 가장 큰 값이 리스트의 맨 앞으로 오게됨
val nums = listOf(1, 5, 3, 2, 1, 2, 2)
val result = nums.groupBy{it}.entries.sortedByDescending {(key, value) -> value.size}
// result = {2=[2,2,2], 1=[1,1], 5=[5], 3=[3]}
  • value.size를 기준으로 내림차순 정렬한다고 설정했기 때문에 빈도수가 높은 숫자인 2가 가장 앞으로 옴

➕ sortedBy

  • 컬렉션의 요소를 오름차순으로 정렬
  • 가장 작은 값이 리스트의 맨 앞으로 오게됨
val nums = listOf(1, 5, 3, 2, 1, 2, 2)
val result = nums.groupBy{it}.entries.sortedBy{(key, value) -> key}
// result = {1=[1,1], 2=[2,2,2], 3=[3], 5=[5]}
  • sortedByDescending의 예시와 달리 key를 기준으로 오름차순 정렬한다고 설정햇기 때문에 key1, 2, 3, 5 순서대로 정렬됨

4. return

if (arr.size > 1 && arr[0].value.size == arr[1].valude.size) -1 else arr[0].key

return에 위와 같이 썼는데 해석해보자!

  • ifarr에 값이 2개 이상 있고, arr[0]arr[1]value의 리스트 요소 개수를 비교했을때 같다면 -1을 리턴한다는 의미
  • elseif가 아니라면 arr[0]key 값을 리턴한다는 의미



[참고 사이트]

'groupBy'. Kotlin
'entries', Kotlin
'sortedBy', Kotlin

0개의 댓글