새소식

반응형
Algotithms

[프로그래머스] 베스트 앨범

  • -
728x90
반응형

문제

  • 앨범에 들어갈 노래의 고유 번호 순서대로 정렬하기
    • 속한 노래가 많이 재생된 장르 ->  많이 재생된 노래 -> 고유 번호가 낮은 노래 먼저 수록
    • 장르 별로 가장 많이 재생된 노래를 최대 2개 까지만 넣는다.

 

풀이

  • 장르별로 노래를 모은 후, 개수로 정렬한다.
  • 장르별 노래를 (재생 횟수 순서, 고유 번호) 순으로 정렬한다.
  • 최대 2개까지 노래를 추가한다.

 

from collections import defaultdict

def solution(genres, plays):
    songs = defaultdict(list)		# 장르별 노래 리스트
    gen_cnt = defaultdict(int)		# 장르별 전체 재생 횟수
    for i, (gen, play) in enumerate(zip(genres, plays)):
        songs[gen].append((i, play))	# 장르별로 (고유번호, 재생횟수) 저장
        gen_cnt[gen] += play		# 장르별 전체 재생 횟수
    
    answer = []		# 정답 배열
    # 많이 재생된 장르 순서대로
    for gen in sorted(gen_cnt, key=lambda x: -gen_cnt[x]):
    	# 각 장르의 노래를 재생 많이 한 횟수 -> 고유 번호 낮은 순으로 정렬
        songs[gen] = sorted(songs[gen], key=lambda x:(-x[1], x[0]))
        answer.append(songs[gen][0][0])		# 첫 번째 곡 추가
        if len(songs[gen]) > 1:			# 두 번째 곡 추가
            answer.append(songs[gen][1][0])
    return answer

 

References

  • 프로그래머스 고득점 Kit 해시, 베스트앨범
반응형

'Algotithms' 카테고리의 다른 글

[백준] 1238 파티  (0) 2023.04.26
[백준] 16956 늑대와 양  (0) 2023.04.26
[프로그래머스] 의상  (0) 2023.04.26
[프로그래머스] 전화번호 목록  (1) 2023.04.26
[프로그래머스] 완주하지 못한 선수  (0) 2023.04.26
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.