Skip to content

[Algorithm] 베스트앨범 #197

Description

@hwangJi-dev

💬 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42579


💬 Idea

  1. struct 구조체를 만들어 음악 정보를 저장해준다.
  2. genreDict를 만들어 재생횟수를 저장해준다
  3. 최대 재생횟수를 가지는 장르 순위대로 베스트앨범을 채운다.
    1. 가장 많이 재생된 장르
    2. 해당 장르 중 가장 많이 재생된 노래
      1. 재생횟수가 같다면 고유번호 낮은 순으로 정렬

💬 풀이

import Foundation
structMusic{vargenre:StringvarplayCnt:Intvarindex:Int}func solution(_ genres:[String], _ plays:[Int])->[Int]{vargenreDict:[String:Int]=[:]varmusics:[Music]=[]varalbum:[Int]=[]for(idx, genre)in genres.enumerated(){
musics.append(Music(genre: genre, playCnt:plays[idx], index: idx))ifgenreDict[genre]==nil{genreDict[genre]=plays[idx]}else{genreDict[genre]! +=plays[idx]}}
musics = musics.sorted(by:{if $0.playCnt == $1.playCnt {return $0.index < $1.index
}else{return $0.playCnt > $1.playCnt
}})foriin genreDict.sorted(by:{ $0.value > $1.value }){letmusic= musics.filter({ $0.genre == i.key }).map({ $0.index })if music.count >=2{
album +=music[0...1]}else{
album.append(music[0])}}return album
}

소요시간 : 23분


💬 더 나은 방법?

  • 구조체 배열을 담는 변수를 제거하고 Dictionary에 튜플 형식으로 응용하여 사용
structMusic{varplayCnt:Intvarindex:Int}func solution(genres:[String], plays:[Int])->[Int]{vargenreDict:[String:([Music],Int)]=[:]varalbum:[Int]=[]for(idx, genre)in genres.enumerated(){ifgenreDict[genre]!=nil{genreDict[genre]!.0.append(Music(playCnt:plays[idx], index: idx))genreDict[genre]!.1+=plays[idx]}else{genreDict[genre]=([Music(playCnt:plays[idx], index: idx)],plays[idx])}}foriin genreDict.sorted(by:{ $0.value.1> $1.value.1}){letmusic= i.value.0.sorted(by:{return($0.playCnt == $1.playCnt)? $0.index < $1.index : $0.playCnt > $1.playCnt
}).map({ $0.index })
album += music.count >=2?music[0...1]:[music[0]]}return album
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions