본문 바로가기
코딩테스트/프로그래머스

[프로그래머스] 해시 : 베스트앨범 Kotlin

by 일상 속 둔치 2020. 9. 5.

Kotlin을 잘 다루는 사람들이 너무 많더라,,, 특히 stream을 정말 잘 사용하시는 분들이 있던데

 

참고하여 풀어보았다. Stream을 들어보기만 했는데 확실히 강력하다.

 

해시의 개념을 이용하여 장르별로 분류하고 장르의 재생 횟수를 내림차순으로 정렬한다.

 

그 이후 앞에서 2개씩 가져와준다.

 

코드를 살펴보자

 

class Solution {
    fun solution(genres: Array<String>, plays: IntArray): IntArray {
        return genres.indices.groupBy { genres[it] } // {classic=[0,2,3], pop=[1,4]} Type : Map
            .toList() // [(classic, [0,2,3]),(pop,[1,4])] Type : List
            .sortedByDescending { it.second.sumBy { plays[it] } } // [(pop, [1,4]), (classic, [0,2,3])] Type : List
            .map { it.second.sortedByDescending { plays[it] }.take(2) } // [[4,1],[3,0]] Type : List
            .flatten() // [4, 1, 3, 0] Type : List
            .toIntArray() // [4, 1, 3, 0] Type : IntArray
    }
}

indices는 index를 다룰 수 있게 해준다. groupBy를 사용해서 genres가 같은 것의 index를 묶어주었다.

 

그 이후 내림차순으로 정렬을 하는데 장르의 sum을 기준으로 내림차순한다.

 

이제 내림차순 되었다면 그 안의 play수를 기준으로 다시 내림차순 정렬하고 take로 2개 가져온다.

 

이후 return 타입을 맞춰주기 위해 flatten으로 하나의 리스트로 합치고 IntArray로 return형을 맞춰준다.

 

 

Java와 Kotlin으로 문제를 풀어보고 있는데 확실히 Kotlin이 collection객체를 다루는 함수들이 많아서 그런지 편하다!

 

이제는 Java가 어색하다 ㅎㅎ,,

 

Kotlin 포스팅도 해야하는데,,,

댓글