Programmers 코딩테스트 연습을 시작했다.
오늘 풀어본 문제는 아래와 같다.
1) 몫 구하기
2) 최빈값 구하기
3) 배열 두 배 만들기
몫 구하기와 배열 두 배 만들기는 나름 이지하게 했는데 최빈값 구하기가 조금 어려웠다😭
내 생각에는 코틀린 함수를 잘 몰라서 그런 것 같아서 기록을 해보려고 한다!!
[문제 설명]
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열array
가 매개변수로 주어질때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
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
}
}
내 코드에 대해 설명해보자면 아래와 같다.
array
를 그룹화하고 value
의 리스트 크기를 기준으로 내림차순으로 정렬한 것을 arr에 저장한다.
그리고 이 arr
의 크기가 1 이상이고, arr[0]
의 value
크기와 arr[1]
의 value
크기가 같다면 -1
을 리턴한다.
그렇지 않다면 arr
의 첫번째 인덱스를 리턴한다.
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]}
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가 가장 앞으로 옴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
를 기준으로 오름차순 정렬한다고 설정햇기 때문에 key
가 1, 2, 3, 5
순서대로 정렬됨if (arr.size > 1 && arr[0].value.size == arr[1].valude.size) -1 else arr[0].key
return
에 위와 같이 썼는데 해석해보자!
if
는 arr
에 값이 2개 이상 있고, arr[0]
와 arr[1]
의 value
의 리스트 요소 개수를 비교했을때 같다면 -1
을 리턴한다는 의미else
는 if
가 아니라면 arr[0]
의 key
값을 리턴한다는 의미[참고 사이트]