728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42579
풀이
장르별 많이 재생된 두곡 씩 추리는 문제
해시테이블의 인덱스를 어떻게 이용해야 하나 고민하다가
장르를 키로 갖고, 인덱스와 재싱수를 딕셔너리 벨류로 갖는 딕셔너리를 만들었는데
그 뒤로는 생각이 너무 많아 쉽사리 코드로 옮기지를 못했다...
시간을 너무 소비하였고 다른 사람의 풀이로 코드를 이해해보기로 했다.
결국 문제를 하나씩 분리해서 그대로 코드로 작성하면 되는 것이었음.
앞으로는 너무 생각을 많이 하지 않고 코드로 일단 옮기는 연습을 좀 더 해야할 것 같다.. ㅠ
func solution(_ genres:[String], _ plays:[Int]) -> [Int] {
var playsByGenre: [String:Int] = [:]
var idsByGenre: [String:[Int]] = [:]
/* playsByGenre = 장르:재생합
idsByGenre = 장르:인덱스
*/
for i in 0..<genres.count {
let genre = genres[i]
let play = plays[i]
if let pCount = playsByGenre[genre] {
playsByGenre[genre] = pCount + play
} else {
playsByGenre[genre] = play
}
if idsByGenre[genre] != nil {
idsByGenre[genre]!.append(i)
} else {
idsByGenre[genre] = [i]
}
}
// 재생합이 많은 장르 순으로 만들고
let bestGenre: [String] = Array(playsByGenre.keys).sorted{
return playsByGenre[$0]! > playsByGenre[$1]!
}
var answer: [Int] = []
for genre in bestGenre {
// bestGenre 순으로
// idsByGenre의 인덱스, 즉 plays의 인덱스를 이용하여 값이 더 큰 순으로 정렬
let IDs = idsByGenre[genre]!.sorted{
return plays[$0] > plays[$1]
}
// answer에 2개씩 넣어줌
answer.append(IDs[0])
if IDs.count > 1 {
answer.append(IDs[1])
}
}
return answer
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스: 해시 - 포켓몬 (1) | 2024.11.08 |
---|---|
프로그래머스 - 겹치는 선분의 길이 (0) | 2023.11.30 |
프로그래머스: 연습문제 - 최솟값 만들기 (0) | 2023.11.27 |
프로그래머스: 월간 코드 챌린지 시즌3 - n^2 배열 자르기 (0) | 2023.10.13 |
프로그래머스: 완전탐색 - 카펫 (0) | 2023.10.07 |
댓글