코딩테스트 베스트앨범 문제풀이

프로그래머스 베스트앨범(level 3) 문제풀이

def solution(genres, plays):
    data ={}
    answer = []
    s=[]
    n = len(genres)
    for i in range(n):
        if genres[i] not in data:
            data[genres[i]] = [[(plays[i], i)], plays[i]]
        else:
            data[genres[i]][1] += plays[i]
            data[genres[i]][0].append((plays[i], i))
    for i in data:
        s.append((data[i][1], i))
    s.sort()
    for i in range(len(s)): 
        f = s.pop()[1]
        data[f][0].sort(key = lambda x: (x[0], -x[1]))
        # -x[1]은 고유번호 내림차순으로 정렬
        answer.append(data[f][0].pop()[1])
        if data[f][0]:
            answer.append(data[f][0].pop()[1])
    return answer

각각의 장르들로 key를 만들고 value로 (곡의 재생횟수, 고유번호)를 넣었다. 그리고 장르의 총 재생횟수를 정렬하고, 또 그 안에서 각 곡들의 재생횟수가 높은 횟수로 정렬한다. 그리고 각 곡의 재생횟수가 같으면 고유번호가 낮은 순으로 정렬해야 하므로 key = lambda x: (x[0], -x[1])로 해 주었다.

여기서 배운 점이 여러 조건의 정렬과 내림차순으로 하고 싶을 시에 -x를 해주면 된다는 것이다

좋은 웹페이지 즐겨찾기