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

이제일·2021년 8월 26일
0

코딩 테스트

목록 보기
2/5
post-thumbnail

문제링크

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

문제

분류

  • 알고리즘 분류
    해쉬 자료구조

  • 난이도
    프로그래머스 Level 3

  • 사용 언어
    python 3

코드

try 1

두개의 해쉬테이블 사용

장르별 총 플레이 수를 확인할 sum_plays
장르별로 구분지어 고유 번호 및 play 수를 저장하는 genres_num을 이용
genres_num은 추후 정렬시 용이하도록 조금 복잡한 구조를 띔

def solution(genres, plays):
    answer = []
    sum_plays = {}  # 장르별 총 플레이 수
    genres_num = {} # 장르에 속한 고유번호 및 play 수
                    # = {'pop' : {'1':600, '4':2500},
                    #           'classic':...}
    
    for i in range(len(genres)): # 노래 전체 탐색
        if(genres[i] in sum_plays): # 이전에 같은 장르를 추가했다면
            sum_plays[genres[i]] += plays[i]
            genres_num[genres[i]][i] = plays[i]
            
        else: # 해당 장르를 처음 추가한다면
            sum_plays[genres[i]] = plays[i]
            genres_num[genres[i]] = {i: plays[i]}
    
    # 총 플레이 수에 따라 내림차순 정렬
    sum_plays = sorted(sum_plays.items(), reverse=True, key = lambda item: item[1])
    
    # 같은 장르 중 플레이 수에 따라 내림차순 정렬
    for genre in genres_num:
        genres_num[genre] = sorted(genres_num[genre].items(), reverse=True, key = lambda item: item[1])
    
    
    # 정해진 순서대로 answer에 입력
    for genre in sum_plays:
        for i in range(min(2, len(genres_num[genre[0]]))):
            answer.append(genres_num[genre[0]][i][0])
    return answer

결과

한번에 통과다 :)

마치며

python의 내장함수인 sorted를 사용하느라 구조가 조금 복잡해졌는데
다른 효율적인 sort기법을 사용할 수 있으면 더욱 이해하기 쉽게 진행 할 것으로 보임.
또한 정확성만 체크해줘서 효율적인 면이 어떤지는 잘 모르겠음. 개인적으로 아쉬운 부분

profile
세상 제일 이제일

0개의 댓글