코딩문제풀이/프로그래머스

[Python] 베스트앨범

코딩하는 포메라니안 2021. 8. 29. 20:22

1. 문제

 

 

 

2. 풀이 과정

방법 1)

def solution(genres, plays):
    answer = []
    hash1 = {} #장르별 분류 [재생횟수, 고유번호] 쌍을 저장
    hash2 = {} #장르별 속한 노래들의 재생 수의 합
    
    for i in range(len(genres)):
    	#장르별 분류
        if genres[i] not in hash1.keys():
            hash1[genres[i]] = []
        hash1[genres[i]].append([-plays[i], i]) #정렬하기 쉽게 재생 횟수를 -로 저장
        #속한 노래들의 재생 수의 합
        if genres[i] not in hash2.keys():
            hash2[genres[i]] = 0
        hash2[genres[i]] += plays[i]
    #합이 큰 순서대로 장르 정렬
    hash2 = sorted(hash2.keys(), key = lambda x : hash2[x], reverse = True)
    #정렬된 장르들에 속한 노래들을 정렬하고 최대 2개 답에 넣기
    for j in hash2:
        hash1[j].sort()
        for k in range(min(len(hash1[j]), 2)):
            answer.append(hash1[j][k][1])
    
    return answer

 

방법 2) 원리는 방법 1)과 같지만, 더 간결하게 나타낸 방법

def solution(genres, plays):
    answer = []
    hash_map = {k:[] for k in set(genres)}
    for m in zip(genres, plays, range(len(plays))):
        hash_map[m[0]].append([-m[1], m[2]])
        
    key_set = sorted(hash_map.keys(), key = lambda x: sum(map(lambda y: y[0],hash_map[x])))
    
    for k in key_set:
        hash_map[k].sort()
        for a in hash_map[k][:min(len(hash_map[k]), 2)]:
            answer.append(a[1])
    return answer

 

'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글

[Python] 이중우선순위큐  (0) 2021.08.30
[Python] 디스크 컨트롤  (0) 2021.08.29
[Python] 타겟 넘버  (0) 2021.08.29
[Python] 구명보트  (0) 2021.08.28
[Python] 큰 수 만들기  (0) 2021.08.28