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

게으른 완벽주의자·2023년 1월 24일
0

프로그래머스

목록 보기
3/83
post-custom-banner

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

이 문제는 해시 카테고리 안에 있는 문제다
해시는 키-값 쌍으로 이루어진 자료구조를 의미하고, 파이썬 안에서는 딕셔너리 형태로 사용 가능하다
탐색할 게 많거나, 넣고 빼는 데이터가 많을 때 해시를 쓰는게 유용하다
각 고유번호 별로 만들어준 temp 리스트를 dict로 만들었다면 좀 더 빠르지 않았을까 싶다

def solution(genres, plays):
    answer = []
    temp = []
    n = len(genres)
    for i in range(n):
        #(장르, 재생횟수, 고유번호) 입력
        temp.append((genres[i], plays[i], i))
    
    #(장르 오름차순, 재생횟수 내림차순, 고유번호 오름차순)으로 정렬
    temp.sort(key=lambda x : (x[0], -x[1], x[2]))
    
    count = {}
    for t in temp:
        if t[0] not in count:
            count[t[0]] = t[1]
        else:
            count[t[0]] += t[1]
    
    #재생횟수 기준 내림차순으로 정렬
    count = sorted(list(count.items()), key = lambda x : -x[1])
    
    for c in count:
        cnt = 0
        for t in temp:
            #장르가 같으면, cnt가 2개가 될 때까지만 고유번호 입력
            if c[0]==t[0]:
                if cnt==2:
                    break
                cnt+=1
                answer.append(t[2])
        
    return answer
profile
데이터를 공부하고 있습니다
post-custom-banner

0개의 댓글