본문 바로가기
Algorithm/프로그래머스

[프로그래밍] 파이썬 문제풀이 - 베스트앨범

by whdgus928 2023. 5. 9.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

1. dic에는 key: genres, value=plays 형태로 장르별 재생수를 합산하다

2. gen에는 [인덱스, 장르, 플레이 수] 를 삽입한다, 인덱스=고유번호

3. dic을 재생수로 정렬하고 탐색한다

4. gen도 재생수로 정렬한다

5. 장르별로 돌면서 재생수가 많은 두 개를 찾는다

6. 재생수가 많은 장르별로 돌고있고 플레이수, 인덱스 순으로 정렬되어있어서 순서는 신경안써도 된다.

 

def solution(genres, plays):
    answer = []
    dic={}
    gen=[]
    for i in range(len(plays)):
        gen.append([i,genres[i],plays[i]])
        if genres[i] not in dic:
            dic[genres[i]]=plays[i]
        else:
            dic[genres[i]]+=plays[i]
    dic=sorted(dic.items(), key=lambda x : x[1],reverse=True)
    gen=sorted(gen,key=lambda x:(x[2]),reverse=True)
    
    for key,_ in dic:
        cnt=0
        for j in gen:
            if cnt==2:
                break
            if key==j[1]:
                answer.append(j[0])
                cnt+=1
    return answer

 

배운 점

1. key 여러개로 정렬할 때 reverse를 각각 설정할 수는 없다

2. 우선순위를 설정하고 키 하나씩 정렬하면 해결된다

3. reverse는 단일 값만 지정

반응형

댓글