알고리즘/프로그래머스

프로그래머스 - 베스트앨범

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

 

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

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

programmers.co.kr

1. 유형

해시, 정렬

 

2. 풀이

1) dictionary[장르] = 조회수 형태로 맵을 만듬

2) lists[장르] = [(조회수, 고유번호)] 형태로 맵을 만듬

3) dictionary를 조회수 기준 내림차순 정렬

4) lists를 조회수 기준 내림차순, 고유번호 오름차순으로 정렬. 단, 2개 까지만 조회

 

3. 코드

def solution(genres, plays):
    answer = []
    diction = dict()
    lists = dict()
    for i in range(len(genres)):
        if genres[i] not in diction:
            diction[genres[i]] = plays[i]
            lists[genres[i]] = [(plays[i], i)]
        else:
            diction[genres[i]] += plays[i]
            lists[genres[i]].append((plays[i], i))
    arr=list(diction.items())
    arr.sort(key = lambda x: -x[1])
    for gen, play in arr:
        lists[gen].sort(key = lambda x: (-x[0], x[1]))
        cnt =0
        for p, index in lists[gen]:
            answer.append(index)
            cnt+=1
            if cnt>=2: break
    return answer