[ Programmers 1012 ] 베스트 앨범(Python)

uoayop·2021년 6월 7일
0

알고리즘 문제

목록 보기
95/103
post-thumbnail

문제

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

장르 별로 가장 많이 재생된 노래를 2개씩 출력해야 한다!


문제 풀이

- 정렬 기준
장르에 노래가 많은 순 > 장르 내에서 많이 들은 노래 순 > 고유번호가 낮은 순


0. 입력 받기

from collections import defaultdict

def solution(genres, plays):
    s_genre = defaultdict(list)
    s_play = defaultdict(int)

    for i in range(len(genres)):
        s_genre[genres[i]].append((i,plays[i]))
        s_play[genres[i]] += plays[i]

s_genre 에는 고유번호와 노래 재생 횟수,
s_play 는 장르를 키 값으로 갖게 해서 장르 별로 노래 횟수를 더해주었다.


1. s_play 많이 재생된 장르 순으로 정렬하기

s_play = sorted(s_play.items(), key = lambda x: x[1], reverse = True)

lambda를 써서 정렬해주었다.


2. 많이 재생된 장르 순으로 노래 두가지 출력하기

answer = []
for play in s_play:
    gen = play[0]
    i = 0
    for temp in sorted(s_genre[gen],
    key = lambda x: x[1], reverse = True):
        answer.append(temp[0])
        i += 1
        if i == 2:
            break

return answer

s_genre도 노래 재생 횟수 > 고유 번호 순으로 정렬해주었다.


코드

from collections import defaultdict

def solution(genres, plays):
    s_genre = defaultdict(list)
    s_play = defaultdict(int)

    for i in range(len(genres)):
        s_genre[genres[i]].append((i,plays[i]))
        s_play[genres[i]] += plays[i]

    # print(s_genre)
    # print(s_play)

    s_play = sorted(s_play.items(), key = lambda x: x[1], reverse = True)

    answer = []
    for play in s_play:
        gen = play[0]
        i = 0
        for temp in sorted(s_genre[gen], key = lambda x: x[1], reverse = True):
            answer.append(temp[0])
            i += 1
            if i == 2:
                break

    return answer
profile
slow and steady wins the race 🐢

0개의 댓글