본문 바로가기

Coding Test/Programmers

[프로그래머스/파이썬] 베스트앨범

728x90

나의 풀이

def solution(genres, plays):

    genre_sum = dict()
    songs_idx = dict()
    answer = []

    for i in range(len(genres)):
        if genres[i] in genre_sum:
            genre_sum[genres[i]] += plays[i]
            songs_idx[genres[i]][i] = plays[i]
        else:
            genre_sum[genres[i]] = plays[i]
            songs_idx[genres[i]] = {i: plays[i]}

    genre_sum = dict(sorted(genre_sum.items(), key=lambda x: x[1], reverse=True))

    for genre in genre_sum:
        songs_idx[genre] = dict(sorted(songs_idx[genre].items(), key=lambda x: x[1], reverse = True))
        idx = list(songs_idx[genre].keys())
        answer.extend(idx[:2])

    return answer

 

 

zip을 활용한 풀이

def solution(genres, plays):
    answer = []
    d = {e:[] for e in set(genres)}
    for e in zip(genres, plays, range(len(plays))):
        d[e[0]].append([e[1] , e[2]])
    genreSort =sorted(list(d.keys()), key= lambda x: sum( map(lambda y: y[0],d[x])), reverse = True)
    for g in genreSort:
        temp = [e[1] for e in sorted(d[g],key= lambda x: (x[0], -x[1]), reverse = True)]
        answer += temp[:min(len(temp),2)]
    return answer

 

 

나의 풀이와 유사한 풀이

def solution(genres, plays):
    genres_dict = {}
    genres_list = []
    for i in range(len(genres)):
        if genres[i] not in genres_dict:
            genres_dict[genres[i]] = []
        genres_dict[genres[i]].append([i, plays[i]])

    for g in genres_dict:
        genres_dict[g].sort(key=lambda x: x[1], reverse=True)
        genres_list.append([g, sum([play for _, play in genres_dict[g]])])

    genres_list.sort(key=lambda x: x[1], reverse=True)
    answer = []
    for g, _ in genres_list:
        answer.extend([x[0] for x in genres_dict[g][:2]])
    return answer
반응형