[프로그래머스] 베스트앨범 - Swift

이창형·2023년 4월 21일
0

코드

import Foundation

func solution(_ genres:[String], _ plays:[Int]) -> [Int] {
	// 어떤 장르가 가장 재생횟수가 많은지 알아보기 위한 변수
    var dic = [String:Int]()
    // 모든 노래의 장르, 인덱스, 재생횟수 저장
    var all = [(String,Int,Int)]()
    var answer = [Int]()
    
    for i in 0..<genres.count {
        let gen = genres[i]
        let play = plays[i]
        dic[gen] = (dic[gen] ?? 0) + play
        // 장르, 인덱스, 재생횟수 저장
        all.append((gen,i,play))
    }
    // 재생횟수가 가장 많은 장르
    var newdic = dic.sorted(by: {$0.1 > $1.1})
    
    while newdic.count != 0 {
    	// 장르로 먼저 필터링을 진행
        // if문을 사용하여 재생횟수가 같으면 인덱스가 작은 순대로 정렬
        // 재생횟수가 다르면 재생횟수가 많은 순으로 정렬
        var answerGenres = all.filter({$0.0 == newdic[0].key}).sorted { if $0.2 == $1.2 {
            return $0.1 < $1.1
        }
            return $0.2 > $1.2
        }
        if answerGenres.count == 1 {
            answer.append(answerGenres[0].1)
        } else {
            answer.append(answerGenres[0].1)
            answer.append(answerGenres[1].1)
        }
        // 사용한 장르는 제거
        newdic.removeFirst()
    }
    return answer
}

회고

  • 처음으로 3단계를 풀었는데 단순 구현 문제라 시간은 오래 걸렸지만 풀 수 있어서 좋았다
  • sorted에 if문을 걸 수 있는지 알게되었다
profile
iOS Developer

0개의 댓글