본문 바로가기

PS/프로그래머스

[프로그래머스 LV 3] 베스트앨범 (파이썬/python)

728x90

https://programmers.co.kr/learn/courses/30/lessons/42579?language=python3 

 

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

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

programmers.co.kr

 

 

딕셔너리에 장르별 총 재생횟수를 넣어주고

리스트에 노래별 장르, 재생횟수, 인덱스값을 넣어주었다.

 

정렬을해주고 

답을 도출했다.

 

한 2달전에 풀때 뭔지 싶어서 건들지도 못했던 문젠데

좀 늘었나; 파이썬으로 바꾼게 컸나; 뭔진 모르겠지만

푸는데 이십분 안걸린것같다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def solution(genres, plays):
    answer = []
    genres_dic = {}
    g_p_list = []
    # 딕셔너리에 넣고
    for i in range(len(genres)):
        if genres[i] not in genres_dic:
            genres_dic[genres[i]] = plays[i]
        else:
            genres_dic[genres[i]] += plays[i]
        # 장르와 재생횟수를 한개의 리스트로 만들어줌
        g_p_list.append([genres[i], plays[i], i])
 
    # 튜플형태로 총 재생횟수를 기준 내림차순 정렬
    genres_dic = sorted(genres_dic.items(), key=lambda item: -item[1])
    # 장르별 정렬, 인덱스는 큰순으로 정렬
    g_p_list = sorted(g_p_list, key=lambda x: (x[0], -x[1], x[2]))
 
    for g in genres_dic:
        cnt = 0
        for i in range(len(g_p_list)):
            if cnt == 2:
                break
            if g[0== g_p_list[i][0]:
                answer.append(g_p_list[i][2])
                cnt += 1
 
    return answer
cs
728x90