유형 : 해시

풀이 시간 : 20분

 

<풀이 코드>

def solution(genres, plays):
    answer = []
    gendict = {}
    for i in range(len(genres)):
        if genres[i] in gendict:
            gendict[genres[i]][0] += plays[i]
            gendict[genres[i]][1].append([plays[i], i])
        else:
            gendict[genres[i]] = [plays[i], [[plays[i], i]]]        
    vlist = list(gendict.values())
    vlist.sort(reverse = True)
    for v in vlist:
        [v1, v2] = v
        v2.sort(reverse = True, key = lambda x: (x[0], -x[1]))
        for i in range(min(len(v2),2)):
            answer.append(v2[i][1])
    print(vlist)
    return answer

 

gendict를 이용하여 풀이했다. 

dict에 genre별로 음악이 재생된 총 횟수와 해당 음악에 대한 정보 리스트를 담고, 

재생 횟수로 dict를 정렬한 다음, 

순서대로 이 list를 순회하며 각 음악 별로 상위 2개를 answer에 담도록 하였다. 

*이차원 배열의 정렬 키*

https://haesoo9410.tistory.com/193 

 

<파이썬> 2차원 배열 정렬

1. 기본적인 리스트 정렬 * sort 정렬 - sort는 리스트에서 제공되는 기본적인 메서드이다. 주로 아래와 같이 사용한다. lst = [2, 3, 5, 6, 1, 4] lst.sort() print(lst) # [1, 2, 3, 4, 5, 6] - sort 는 기본적으로 오름

haesoo9410.tistory.com

 

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

 

두 개의 요소를 key로 사용하기 위해서는 key에 set을 넣어 주면 된다. 

그리고 만약 반대로 정렬이 필요한 경우 -를 앞에 붙여 준다. 

'프로그래머스 > Lv. 3' 카테고리의 다른 글

5. 정수 삼각형 (DP)  (0) 2024.07.19
4. 여행경로 ★★  (0) 2024.07.19
3. 단어 변환 (BFS)  (0) 2024.07.19
2. 네트워크  (0) 2024.07.19
복사했습니다!