[프로그래머스] 베스트앨범

Mongle·2021년 4월 25일
0

나의 풀이

리스트를 사용해서 풀었다.
풀면서 딕셔너리를 활용했으면 더 쉬웠겠다는 생각을 했다. 주로 리스트로 문제에 접근하다보니 딕셔너리를 써야 할 때도 잘 못쓰는 것 같다.

def solution(genres, plays):
    genre_set = list(set(genres))
    playing_nums = [0 for _ in range(len(genre_set))]
    keys = [[] for _ in range(len(genre_set))]
    temp = []
    answer = []

    for idx in range(len(genres)):
        playing_idx = genre_set.index(genres[idx])
        playing_nums[playing_idx] += plays[idx]
        keys[playing_idx].append((plays[idx], idx))

    for key in keys:
        key.sort(reverse=True, key = lambda x : (x[0], -x[1]))

    while playing_nums:
        max_idx = playing_nums.index(max(playing_nums))
        temp.append(keys[max_idx][:2])
        playing_nums.pop(max_idx)
        keys.pop(max_idx)

    for i in range(len(temp)):
        for val in temp[i]:
            answer.append(val[1])
    return answer

딕셔너리를 사용해서 푼 풀이다.
깔끔하다.
enumerate와 zip 함수는 알아두면 유용하게 사용할 것 같다.
sort(reverse, key)를 이용하면 정렬을 아주 쉽게 할 수 있다. key는 lamda를 사용하면 여러 조건을 지정할 수 있다는 것을 기억하자

def solution(genres, plays):
    answer = []

    dic1 = {}
    dic2 = {}

    for i, (g, p) in enumerate(zip(genres, plays)):
        if g not in dic1:
            dic1[g] = [(i, p)]
        else:
            dic1[g].append((i, p))

        if g not in dic2:
            dic2[g] = p
        else:
            dic2[g] += p

    for (k, v) in sorted(dic2.items(), key=lambda x:x[1], reverse=True):
        for (i, p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
            answer.append(i)

    return answer
profile
https://github.com/Jeongseo21

1개의 댓글

comment-user-thumbnail
2021년 6월 16일

저기요 저 2기 sw정글 지원하는데요 조언좀 구하고싶어요! 혹시 보시면 답글좀 달아주시겠어요?

답글 달기