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

728x90
반응형

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

 

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

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

programmers.co.kr

Python의 dictionary는 '해쉬테이블'형식으로 구현되어 있어서 속도가 빠르다. 코테나 알고리즘을 공부하면서 '해시'가 나온다면 파이썬은 대부분 dictionary로 풀면 될 것이다.

 

 

def solution(genres, plays):
    answer = []
    dic = {}
    for i in range(len(genres)):
        if genres[i] in dic:
            # 현재 장르가 이미 dic에 있다면 그 장르에 해당하는 value의 0번째 index에 현재 index를 append해주고
            # 1번째 index에 재생횟수를 추가해준다.
            dic[genres[i]][0].append(i)
            dic[genres[i]][1] += plays[i]
        else:
            # 현재 장르가 dic에 없다면 dic에 현재 index와 재생횟수를 추가해준다.
            dic[genres[i]] = [[i], plays[i]]
    
    # dic.items()를 재생횟수순으로 내림차순 정렬(-x[1][1])해서 diclist에 할당한다.
    diclist = sorted(dic.items(), key = lambda x: -x[1][1])
    for i in diclist:
        # 현재 장르에 속한 곡이 하나라면 하나만 answer에 추가시켜준다.
        if len(dic[i[0]][0]) == 1:
            answer.append(dic[i[0]][0][0])
        else:
            # 현재 장르에 속한 곡이 2개 이상이라면, 재생횟수순으로 내림차순 정렬한 뒤 상위 2개의 곡만 answer에 extend해준다.
            dic[i[0]][0].sort(key = lambda x: -plays[x])
            answer.extend(dic[i[0]][0][:2])
    return answer

 

(처음 level 3문제를 맞췄는데, level 2수준인 것 같다..  프로그래머스 난이도 설정도 주관적이므로 어쩔수 없나보다.)

728x90
반응형
TAGS.

Comments