본문 바로가기
Algorithm/Python

기억해둘 구현 방식

by Code Art 2024. 4. 6.

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