//프로그래머스 - 베스트앨범
fun solution(genres: Array<String>, plays: IntArray): IntArray {
// 장르별 총 재생 횟수
val genrePlayCount = mutableMapOf<String, Int>()
// 장르별 노래 목록
val genreMusics = mutableMapOf<String, MutableList<Pair<Int, Int>>>()
for (i in genres.indices) {
val genre = genres[i]
val play = plays[i]
// 장르별 총 재생 횟수 갱신 - 장르를 키 값으로 해서 재생횟수 갱신
genrePlayCount[genre] = genrePlayCount.getOrDefault(genre, 0) + play
// 장르별 노래 목록 갱신
if (genre !in genreMusics) { // 없을 경우 생성
genreMusics[genre] = mutableListOf()
}
genreMusics[genre]!!.add(Pair(i, play))
}
// 장르를 총 재생 횟수 기준으로 내림차순 정렬
val sortedGenres = genrePlayCount.toList().sortedByDescending { it.second }.map { it.first }
val result = mutableListOf<Int>()
for (genre in sortedGenres) {
// 각 장르 내에서 노래를 재생 횟수와 고유 번호를 기준으로 정렬
val musics = genreMusics[genre]!!.sortedWith(compareByDescending<Pair<Int, Int>> { it.second }.thenBy { it.first })
// 최대 두 개의 노래를 결과에 추가
for (i in 0 until minOf(2, musics.size)) {
result.add(musics[i].first)
}
}
return result.toIntArray()
}
// 테스트 코드
fun main() {
val genres = arrayOf("classic", "pop", "classic", "classic", "pop")
val plays = intArrayOf(500, 600, 150, 800, 2500)
val result = solution(genres, plays)
println(result.joinToString(", ")) // [4, 1, 3, 0]
}
'코딩테스트 준비(kotlin) > 자료구조' 카테고리의 다른 글
[프로그래머스 , kotlin] 이중우선순위큐 (0) | 2024.08.01 |
---|---|
[프로그래머스 kotlin] 다리를 지나는 트럭 (0) | 2024.07.09 |
[프로그래머스 kotlin] 롤케이크 자르기 (0) | 2024.07.01 |
[프로그래머스 kotlin] 프로세스 (0) | 2024.06.24 |
[프로그래머스 kotlin] 기능개발 (0) | 2024.06.23 |