본문 바로가기

⏳ 알고리즘/python 알고리즘 문제 풀이

프로그래머스 - LV3. 베스트앨범

문제

https://programmers.co.kr/learn/courses/30/lessons/42579#

 

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

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

programmers.co.kr

 

코드

def solution(genres, plays):
    result = []
    answer = []
    dict_ = {}
    # dict_ = { 장르 : [ ( 플레이 횟수, 고유 번호 ) ] }
    played = {}
    # dict_ = { 장르 : [ 전체 플레이 횟수 ] }
        
    #dict_ 딕셔너리 초기화
    for i in range(len(genres)):
        if genres[i] in dict_.keys():
            dict_[genres[i]] += [(i, plays[i])]
        else:
            dict_[genres[i]] = [(i, plays[i])]
    
    #played 딕셔너리 초기화
    for d in dict_:
        for i in range(len(dict_[d])):
            if d in played.keys():
                played[d] += dict_[d][i][1]
            else:
                played[d] = dict_[d][i][1]
    played = sorted(played.items(), key = lambda x: x[1], reverse = True)
    
    
    for j in range(len(played)):
        lst = sorted(list(dict_[played[j][0]]), key = lambda x:x[1], reverse = True)
        if len(lst) >= 2:
            result.append(lst[:2])
        else:
            result.append(lst[0])
            
    for r in result:
        for i in range(len(r)):
            answer.append(r[i][0])
            
    return answer

for문의 개수가 많아서 그런지 런타임 에러가 떴다.

반복문의 개수를 줄여야겠다.

 

 

 

 

 

 

 

 

 

 

def solution(genres, plays):
    result = []
    dict_ = {}
    # dict_ = { 장르 : [ ( 플레이 횟수, 고유 번호 ) ] }
    played = {}
    # dict_ = { 장르 : [ 전체 플레이 횟수 ] }
        
    #dict_ 딕셔너리 초기화
    for i in range(len(genres)):
        if genres[i] in dict_.keys():
            dict_[genres[i]] += [(i, plays[i])]
        else:
            dict_[genres[i]] = [(i, plays[i])]
    
    #played 딕셔너리 초기화
    for d in dict_:
        for i in range(len(dict_[d])):
            if d in played.keys():
                played[d] += dict_[d][i][1]
            else:
                played[d] = dict_[d][i][1]
    played = sorted(played.items(), key = lambda x: x[1], reverse = True)
    
    
    for j in range(len(played)):
        lst = sorted(list(dict_[played[j][0]]), key = lambda x:x[1], reverse = True)
        if len(lst) >= 2:
            result.append(lst[0][0])
            result.append(lst[1][0])
        else:
            result.append(lst[0][0])
            
    return result

결과 리스트에 값을 추가하는 부분을 수정했더니 성공했다..!!