알고리즘/Python
[python] 프로그래머스 - 베스트앨범
제주도랏맨
2023. 4. 16. 00:03
출처 : 프로그래머스, 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