https://school.programmers.co.kr/learn/courses/30/lessons/42579?language=swift
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. Python 풀이
딕셔너리 정렬에서 고생을 좀 했다. 조심하자.
def solution(genres, plays):
genre = {}
totalPlay = {}
# 장르 재생 총합을 기준으로 정렬한다
for i, (g,p) in enumerate(zip(genres, plays)):
if g not in totalPlay:
totalPlay[g] = 0
genre[g] = []
totalPlay[g] += p
genre[g].append([i, p])
# 장르 별로 가장 많이 재생된 노래 2개씩만 넣는다
answer = []
for g in sorted(totalPlay.items(), key=lambda x:x[1], reverse=True):
candidate = sorted(genre[g[0]], key=lambda x: (x[1], -x[0]), reverse=True)
answer.append(candidate[0][0])
if len(candidate) > 1:
answer.append(candidate[1][0])
return answer
2. Swift 풀이
import Foundation
func solution(_ genres:[String], _ plays:[Int]) -> [Int] {
var totalPlay = [String:Int]()
var genre = [String: [(Int, Int)]]() //장르: 인덱스, 재생 횟수
for (i, (g, p)) in zip(genres, plays).enumerated() {
if totalPlay[g] == nil {
totalPlay[g] = 0
genre[g] = []
}
totalPlay[g]! += p
genre[g]!.append((i,p))
}
var answer = [Int]()
for (g, _) in totalPlay.sorted(by: { $0.value > $1.value }) {
let candidate = genre[g]!.sorted(by: { $0.1 == $1.1 ? $0.0 < $1.0 : $0.1 > $1.1 })
answer.append(candidate[0].0)
if candidate.count > 1 {
answer.append(candidate[1].0)
}
}
return answer
}
[소프티어] 금고털이 (0) | 2024.01.29 |
---|---|
[프로그래머스] 두 큐 합 같게 만들기 (0) | 2024.01.25 |
[프로그래머스] 다리를 지나는 트럭 (1) | 2024.01.23 |
[프로그래머스] 쿼드압축 후 개수 세기 (0) | 2024.01.19 |
[프로그래머스] 기지국 설치 (0) | 2024.01.18 |