본문 바로가기

programmers 알고리즘/구현

베스트앨범 (해시)

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

 

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

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

programmers.co.kr

def solution(genres, plays):
    # D: {'classic': [(500, 0), (150, 2), (800, 3)], 'pop': [(600, 1), (2500, 4)]}
    D = {g: [] for g in set(genres)}
    N = len(genres)
    for g, p, i in zip(genres, plays, range(N)):
        D[g].append((p, i))

    # C: ['pop', 'classic']
    # C = sorted(D, key=lambda k: sum(map(lambda x: x[0], D[k])), reverse=True)
    C = sorted(D, key=lambda k: sum([p for p, i in D[k]]), reverse=True)

    # ans: [4, 1, 3, 0]
    ans = []
    for g in C:
        a = sorted(D[g], key=lambda x: (-x[0], x[1]))
        # a = list(map(lambda x: x[1], a))
        a = [i for p, i in a]
        ans += a[: min(len(a), 2)]
    return ans


res = solution(["classic", "pop", "classic", "classic", "pop"], [500, 600, 150, 800, 2500])
print(res)

'programmers 알고리즘 > 구현' 카테고리의 다른 글

기능개발 (스택/큐)  (0) 2020.11.04
주식가격 (스택/큐)  (0) 2020.11.03
위장 (해시)  (0) 2020.11.02
전화번호 목록 (해시)  (0) 2020.11.02
완주하지 못한 선수 (해시)  (0) 2020.11.02