티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42579?language=python3

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

dic : 장르별 재생 횟수가 저장된 딕셔너리

      -> {'classic': 1450, 'pop': 3100}

      -> 정렬 후 [('pop', 3100), ('classic', 1450)]

 

album : 장르별 노래의 재생된 횟수와 고유번호가 저장된 딕셔너리

      ->  {'classic': [[500, 0], [150, 2], [800, 3]], 'pop': [[600, 1], [2500, 4]]}

 

def solution(genres, plays):
    answer = []
    dic = {}
    album = {}
    
    for i in range(len(genres)):
        if genres[i] not in dic:
            dic[genres[i]] = plays[i] # 장르별 재생된 횟수 저장
            album[genres[i]] = [[plays[i], i]] # 이차원배열 형태로 [재생 횟수, 고유 번호] 저장
        else:
            dic[genres[i]] += plays[i] 
            album[genres[i]].append([plays[i], i]) 
            
    dic = sorted(dic.items(), key=(lambda x:x[1]), reverse = True) # 많이 재생된 장르 순으로 정렬
    
    for genre in dic: # 많이 재생된 장르를 차례대로 탐색
        tmp = album[genre[0]]
        tmp = sorted(tmp, key=lambda x:x[0], reverse = True) # 재생된 횟수를 기준으로 내림차순 정렬
        
        if len(tmp) > 1: # 노래가 2개 이상이면 첫번째, 두번째 고유번호만 가져옴
            answer.append(tmp[0][1])
            answer.append(tmp[1][1])
        else:
            answer.append(tmp[0][1])
            
    return answer

 

공지사항
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함