- Date : 2020.08.21(금)
- Time : 60분
- 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다.
- 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
- 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
- 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.
- 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요.
for i in range(len(genres)):
playGenresTime[genres[i]] = playGenresTime.get(genres[i], 0) + plays[i]
allDict[genres[i]] = allDict.get(genres[i], []) + [(plays[i], i)]
#playGenresTime은 {장르 : 총 재생 횟수}로 제작하고
#allDict은 {장르 : [(플레이 횟수, 고유번호)]}의 형식으로 만들어줍니다.
# 장르별로 최대 2개를 선택하게 한다.
for (genre, totalPlay) in genreSort:
allDict[genre] = sorted(allDict[genre], key=lambda x: (-x[0], x[1]))
answer += [idx for (play, idx) in allDict[genre][:2]]
일단 해시 형태를 많이 다뤄보지 않아서 value:key의 관계를 만드는것이 조금 어려웠고, (장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.) 라는 예외를 처리하는 부분이 조금 어려웠다. 나중에 한번 더 외워서 풀어봐야겠다..