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

박신희·2022년 10월 10일
0

[풀이] 프로그래머스

목록 보기
27/33
post-thumbnail

❗ 풀이 과정

  • 일단, {장르: 총 플레이 횟수} 딕셔너리를 생성한 후, 장르 별로 총 play 횟수에 따라서 내림차순 정렬을 해주었다.
  • 정렬해준 딕셔너리를 가지고 for문을 돌려서, 플레이 횟수가 많은 장르 순서대로, 노래별로 플레이 횟수와 인덱스 추출한 배열 저장!
  • 장르 내에서 많이 재생된 노래를 먼저 수록,장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록 이 2가지 조건을 만족하기 위해서 추출했던 배열을 또 정렬
  • 장르 별로 가장 많이 재생된 노래를 최대 2개 까지! answer에 저장!
  • 설명을 더럽게 한 것 같다.. 주석을 참고해주세용!

🤜 풀이 코드

def solution(genres, plays):
    answer = []
    genre_play=dict()
    
    # 장르별로 play 횟수
    for idx, (k,v) in enumerate(zip(genres,plays)):
        genre_play[k]=genre_play.get(k,0)+int(v)   

    # 장르별로 play 횟수 내림차순으로 정렬
    play_list=sorted(genre_play.items(),key=lambda x:x[1], reverse=True)

    
    # 많이 재생된 장르 순으로 for문 돌리기
    for k,v in play_list:
        song_arr=[]

        # 재생횟수와 고유번호 넣어주기
        for idx,(g, p) in enumerate(zip(genres,plays)):
            if g==k:
                song_arr.append([p,idx])
                
        # 조건 2,3 을 고려한 정렬
        song_arr.sort(key = lambda x : (-x[0],x[1]))
        
        # 장르 별로 가장 많이 재생된 노래를 최대 2개 까지!
        for i in range(min(len(song_arr),2)):
            answer.append(song_arr[i][1])
        
    return answer

🤷‍♀️ 코드 리뷰

사실, 이 문제를 4월 말에 풀어봤다가 결국에 해결 못하고 6개월이 지난 10월에서야 다 풀었다.
질문하기에 올려놓고 2분이나 답변해줬지만, 6개월이 지난 다음에야 감사하다고 답변하는 나란 사람,, too lazy,,

여튼 내가 4월 말에 풀지 못했던 이유는 딕셔너리를 제대로 정렬하지 못하여서였다.


처음에는 sorted에 딕셔너리 그대로를 넣어버렸는데,

    # 장르별로 play 횟수 내림차순으로 정렬
    play_list=sorted(genre_play,key=lambda x:x[1], reverse=True)

이렇게 풀면 key값으로 정렬이 된다고 한다!..! genre_play.items() 를 넣어서 풀어야 정답이었다고 한다.

profile
log my moments 'u')/

0개의 댓글