본문 바로가기
프로그래머스/3단계

(Python/LV3)베스트 앨범

by windy7271 2022. 10. 29.
728x90
반응형

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

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

programmers.co.kr

문제 풀이:

def solution(genres, plays):
    dic = {}
    dic_sum = {}
    for i, (genre, play) in enumerate(zip(genres, plays)):
        if genre not in dic:
            dic[genre] = [(i,play)]
        else:
            dic[genre].append((i,play))

        if genre not in dic_sum:
            dic_sum[genre] = play
        else:
            dic_sum[genre] += play
    res = []
    for x, y in sorted(dic_sum.items(), key=lambda x:x[1], reverse=True): # 장르 별 큰 값으로 정렬
        for a, b in sorted(dic[x], key=lambda x:x[1], reverse=True)[:2]:
            res.append(a)
    return res

 

 

 

dic = {}
dic_sum = {}

dic은 고유번호 플레이 시간 저장
dic_sum은 장르별 총 합 저장

 

 

for i, (genre, play) in enumerate(zip(genres, plays)):
    if genre not in dic:
        dic[genre] = [(i,play)]
    else:
        dic[genre].append((i,play))

    if genre not in dic_sum:
        dic_sum[genre] = play
    else:
        dic_sum[genre] += play

i 는 고유번호 genre ,play 는 장르와 플레이시간

 

첫 번째 if문은 고유번호플레이시간을 추가해준다

두 번째 if문은 총 플레이시간을 추가해준다.

 

res = []
for x, y in sorted(dic_sum.items(), key=lambda x:x[1], reverse=True): # 장르 별 큰 값으로 정렬
    for a, b in sorted(dic[x], key=lambda x:x[1], reverse=True)[:2]:
        res.append(a)
return res

첫 포문은 장르별 총 플레이시간 ex)클래식 3000, 팝 2000, 이렇게 정렬해주고

정렬한거에서 2개씩 가져와야하니깐 

dic[x] 만약 클래식이 제일 많다면 클래식 안에서 플레이시간 높은거 2개를 뽑아와야하므로

키 람다식과 슬라이싱으로 잘라서 2개까지 넣어준다.

 

반응형

댓글