출처 : 프로그래머스, https://school.programmers.co.kr/learn/courses/30/lessons/42579
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
# 많이 플레이된 장르순 -> 장르 내에서 가장 많이 플레이된 노래 순으로 2개 수록
# 같은 경우 idx가 작은 것부터 수록
더보기
먼저, 생각해야 할 부분
1. 많이 플레이된 장르 순으로, 장르 내에서 플레이 수가 상위 2개인 노래를 담아야한다.
이를 위해서는 장르별 플레이수, 장르별 플레이 순으로 정렬된 노래가 필요하다.
위 둘을 구하면, 플레이 수가 많은 장르를 가져와서 장르별 노래에서 상위 2개를 가져와 추가하면 된다.
풀이
from collections import defaultdict
def solution(genres, plays):
answer = []
# 많이 플레이된 장르순 -> 장르 내에서 가장 많이 플레이된 노래 순으로 2개 수록
# 같은 경우 idx가 작은 것부터 수록
# 장르별 합산
genre_dict = defaultdict(int)
# 장르별 노래
genre_song_dict = defaultdict(lambda : [])
for i in range(len(plays)):
genre = genres[i]
song = i
play = plays[i]
genre_dict[genre] += play
genre_song_dict[genre].append([song, play])
# 장르별 순서 정렬
for genre, song_list in genre_song_dict.items():
# 각 장르별로 노래를 플레이 순으로 내림차순 정렬하고 상위 2개를 잘라 리스트로 만들어 장르_노래에 넣는다.
genre_song_dict[genre] = [song_idx for song_idx, play in sorted(song_list, key = lambda x: -x[1])[:2]]
# 가장 많이 플레이된 장르 순으로 장르별 상위 2개 노래를 answer에 추가
for genre, play in sorted(list(genre_dict.items()), key = lambda x: -x[1]):
answer += genre_song_dict[genre]
return answer
Github
GitHub - bh2980/Algorithm-Problem: 알고리즘 풀이 흔적들
알고리즘 풀이 흔적들. Contribute to bh2980/Algorithm-Problem development by creating an account on GitHub.
github.com
'알고리즘 > Python' 카테고리의 다른 글
[python] 프로그래머스 - 택배 배달과 수거하기 (0) | 2023.04.21 |
---|---|
[python] 백준 1062 - 가르침 (0) | 2023.04.16 |
[python] 백준 1654 - 랜선 자르기 (0) | 2023.04.15 |
[python] 백준 11055 - 가장 큰 증가하는 부분 수열 (0) | 2023.04.15 |
[python] 백준 11722 - 가장 긴 감소하는 부분 수열 (0) | 2023.04.15 |