밍쯔와 안작고 안귀여운 에러들🖤

[Python] 프로그래머스 고득점 kit - 해시: level3 베스트 앨범 본문

Algorithm

[Python] 프로그래머스 고득점 kit - 해시: level3 베스트 앨범

밍쯔 2022. 1. 18. 14:41

문제

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

 

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

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

programmers.co.kr

 

코드

def solution(genres, plays) :
	dic_totall = {}
   	dic = {}
   	num = 0
   	answer = []

	##1. 각 장르별 총 실행 횟수
    for gen in genres:
        if gen not in dic_totall:
            dic_totall[gen] = plays[num]
        else:
            dic_totall[gen] += plays[num]
        num += 1
    
    ##내림차순 정렬
    dic_totall = sorted(dic_totall.items(), key = lambda x: x[1], reverse=True)

	##2. 스트리밍 수가 가장 많은 장르부터 2개씩 뽑기
    for genre_totall, _ in dic_totall:
        for gen in range(len(genres)):
            if genres[gen] == genre_totall:
                dic[gen] = plays[gen]
        dic = sorted(dic.items(), key = lambda x: x[1], reverse=True)
		
        ##스트리밍 수가 가장 큰 2개만 선택
        for music, _ in dic[:2]:
            answer.append(music)
        dic = {}
    
    return answer

 

설명

먼저 장르마다 스트리밍 총 횟수를 딕셔너리 타입으로 {'장르': '총 횟수} 정리한다.

이후, 내림차순으로 정렬하고 각 장르의 개별 곡들의 스트리밍 수를 구분해 낸다.

그리고 그 중 가장 높은 2개를 answer에 담는다. 

 

고찰

2번에서 장르 종류만큼 반복해서 다시 읽어야 하는 부분이 효율성 측면에서 떨어지는 것 같다. 문제를 다른 방식으로 접근해볼 필요가 있을 것 같다.