1. https://school.programmers.co.kr/learn/courses/30/lessons/42579
- enumerate와 zip을 같이 사용하는 방식
- 딕셔너리에서 키 하나 값에 리스트로 요소를 하나씩 추가하는 방식
- 딕셔너리를 반복문 돌려서 새로운 딕셔너리를 만들 때, items() 활용 # genre_rank 부분
- 튜플 값을 반복문 돌려서 원하는 값을 얻어내는 방식 # sum 부분
- 딕셔너리를
- 딕셔너리에서 원하는 기준으로 정렬할 때, sorted(), dict.keys(), lambda 사용하는 방식 => 기준대로 정렬한 리스트 출력
genre_play_dict = {}
for i, (genre, play) in enumerate(zip(genres, plays)):
if genre not in genre_play_dict:
genre_play_dict[genre] = []
genre_play_dict[genre].append((play, i))
# 각 장르별 총 재생 횟수를 기준으로 정렬
# plays = [(play, i), (play, i), ...]
genre_rank = {genre: sum(play for play, _ in plays) for genre, plays in genre_play_dict.items()}
print(genre_rank) # {'classic': 1450, 'pop': 3100}
sorted_genres = sorted(genre_rank.keys(), key=lambda x: genre_rank[x], reverse=True)
print(sorted_genres) # ['pop', 'classic']
for genre in sorted_genres:
# 각 장르 내에서 재생 횟수가 많은 순으로 정렬하고, 재생 횟수가 같다면 고유 번호가 낮은 순으로 정렬
sorted_songs = sorted(genre_play_dict[genre], key=lambda x: (-x[0], x[1]))
print(sorted_songs) # [(800, 3), (500, 0), (150, 2)]
answer.extend([song_id for _, song_id in sorted_songs[:2]])
'Algorithm > Python' 카테고리의 다른 글
최소 신장 트리 (MST) (0) | 2024.04.09 |
---|---|
그래프 (0) | 2024.04.08 |
순열, 조합 (0) | 2024.04.05 |
기억해둘 수학적 개념 (0) | 2024.04.05 |
Queue (0) | 2024.04.05 |