본문 바로가기

Algorithm

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

반응형

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

 

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

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

programmers.co.kr

 

풀이

  • 장르 별 재생된 노래를 { key: 장르, vaule: 재생 횟수 }형식으로 딕셔너리에 담는다. -> genresCnt
  • genresCnt를 value 기준으로 내림차순 정렬한다.
  • genresCnt의 key와 일치하는 genres의 인덱스를 찾고, 인덱스에 해당하는 plays를 { key: 장르의 인덱스, value: 인덱스에 대응하는 재생 횟수 }형식으로 딕셔너리에 담는다. -> playsCnt
  • playsCnt를 value 기준으로 내림차순 정렬한다.
  • playsCnt의 앞에서부터 2개의 key를 answer에 담는다.

 

소스코드

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

    #1. key-value 구조화
    genresCnt = {}
    for i in range(len(genres)):
        genre = genres[i]
        if genre in genresCnt:
            genresCnt[genre] += plays[i]
        else:
            genresCnt[genre] = plays[i]

    #2. value 기준으로 내림차순 정렬
    genresCnt = dict(sorted(genresCnt.items(), key=lambda item: item[1], reverse=True))

    #3. genresCnt key 탐색
    for genre in genresCnt.keys():
        #3-1. 각 index에 해당하는 plays -> key-value로 구조화
        playsCnt = {}
        for idx, val in enumerate(genres):
            if genre == val:
                 playsCnt[idx] = plays[idx]

        #3-2. value 기준으로 내림차순 정렬
        playsCnt = dict(sorted(playsCnt.items(), key=lambda item: item[1], reverse=True))

        #3-3. 앞에서부터 2개의 key를 answer에 추가
        i = 0
        for key, val in playsCnt.items():
            if i > 1:
                break
            answer.append(key)
            i += 1
        playsCnt.clear()

    return answer

 

🤐 사족

파이썬에서 딕셔너리를 value 기준으로 정렬하는 방법 기억하자!

dict(sorted(sortByValue.items(), key=lambda item: item[1])
반응형