ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스][Kotlin] 베스트앨범
    프로그래머스 2023. 3. 21. 11:34
    728x90

    저는 해당 문제를 Hashmap과 우선순위큐를 사용하여 작성하였습니다.

    제가 푼 방법이 최적의 방법이 아닐 수 있음을 말씀드립니다. 

    첫번째로는 music 종류 별로 map에 저장하여 재생된 횟수를 합산하여 종류별로 많이 재생된 순서대로 list로 만들었습니다.

    두번째로는 list를의 종류를 하나씩 genres를 순회하며 데이터클래스를 작성하여 우선순위큐에 현재 조회하고 있는 list내 음악종류와 해당 음악이 재생된 횟수, 음악번호를 저장하였습니다.

     

    세번째로는 list내 한 종류에 대한 genres 순회가 끝나면 우선순위 큐에서 상단에 있는 2개의 자료의 음악번호를  answer에 저장하였습니다.

    이때 종류별로 음악이 2개 이상인 아닌 경우를 생각하여 조건문을 추가하였습니다.

     

    저의 경우 이중for문을 돌려 해당 코드를 작성하였습니다.

     

    하기는 제가 작성한 코드와 실행 결과 입니다.

    import java.util.PriorityQueue
    
    class Solution {
        fun solution(genres: Array<String>, plays: IntArray): IntArray {
            var answer = intArrayOf()
            var mscnt = HashMap<String,Int>()
    
            for(i in 0 .. genres.size-1){
                if(mscnt.containsKey(genres[i])){
                    mscnt[genres[i]] = plays[i] + mscnt[genres[i]]!!
                    continue
                }
                mscnt[genres[i]] = plays[i]
            }
    
            var temp = mscnt.toList().sortedWith(java.util.Comparator { o1, o2 -> o2.second.compareTo(o1.second)})
    
            for(i in temp) {
                var pq = PriorityQueue<Info>(Comparator { o1, o2 ->  o2.count.compareTo(o1.count)})
                for(j in 0 .. genres.size-1){
                    if(genres[j] == i.first){
                        pq.add(Info(genres[j],plays[j],j))
                    }
                }
                answer += pq.poll().num
                if(!pq.isEmpty()) {
                    answer += pq.poll().num
                }
            }
    
            return answer
        }
        data class Info(
            val music: String,
            val count: Int,
            val num: Int
        )
    }
    테스트 1 통과 (31.74ms, 63.4MB)
    테스트 2 통과 (36.30ms, 63.2MB)
    테스트 3 통과 (30.18ms, 62.9MB)
    테스트 4 통과 (29.93ms, 64.6MB)
    테스트 5 통과 (31.63ms, 63.6MB)
    테스트 6 통과 (30.86ms, 63.6MB)
    테스트 7 통과 (25.51ms, 63.3MB)
    테스트 8 통과 (24.64ms, 63.5MB)
    테스트 9 통과 (22.96ms, 63.8MB)
    테스트 10 통과 (21.05ms, 64MB)
    테스트 11 통과 (22.21ms, 63.1MB)
    테스트 12 통과 (20.62ms, 63.3MB)
    테스트 13 통과 (22.56ms, 63.3MB)
    테스트 14 통과 (23.65ms, 63.2MB)
    테스트 15 통과 (20.40ms, 63.1MB)

     

     

    ※ 저는 해당문제를 통과 후 다른사람의 풀이 중 가장 상단에 있는 코드를 보고 감탄을 금치 못했었습니다......

Designed by Tistory.