프로그래머스 코딩테스트 고득점 Kit_해시_베스트앨범
문제 보러 가기 👈 클릭!
💡 풀이
✔ 풀이 방법 1
{장르: [(재생횟수, 노래번호)], ...} 와 같이 장르별로 노래의 재생횟수와 번호를 모아놓은 딕셔너리를 만든다.
총 재생횟수가 가장 많은 순으로 장르를 나열 해 놓은 리스트 genre_sort를 만든다.
genre_sort를 반복하며 해당 장르의 노래들을 가장 많이 재생한순으로 정렬한 후, 노래번호로 정렬한다. 또한 해당 장르별로 가장 많이 재생한 2개의 노래를 앨범(answer)에 추가한다.
구현 코드👇
#장르별 가장 많이 재생된 노래를 2개씩 모아 베스트앨범 만듬
#총 재생횟수가 가장 많은 장르부터 수락함(가장 횟수가 많은 곡 부터, 횟수 같으면 고유번호 작은것 부터 수락)
from collections import defaultdict
def solution(genres, plays):
answer = []
play_cnt = defaultdict(int) #play_cnt = {장르: 해당 장르 노래 총 재생횟수}
genre_dict = defaultdict(list) #genre_dict = {장르: [(재생횟수, 노래고유번호),..] }
for i, genre, play_n in zip(range(len(genres)), genres, plays):
play_cnt[genre] += play_n
genre_dict[genre].append((play_n, i))
#genre_sort = 총 재생횟수가 가장 높은순으로 장르가 담겨있는 list
genre_sort = sorted(list(play_cnt.keys()), key = lambda x: -play_cnt[x])
for genre in genre_sort:
#genre_dict의 값들을 가장 많이 재생된순으로 정렬 후, 노래번호가 가장 적은순으로 정렬
genre_dict[genre].sort(key = lambda x: (-x[0], x[1]))
#장르별로 노래 2개를 앨범에 추가
answer.extend([song_n for play_n, song_n in genre_dict[genre][:2]])
return answer
✔ 풀이 방법 2
구현 코드👇
#장르별 가장 많이 재생된 노래를 2개씩 모아 베스트앨범 만듬
#총 재생횟수가 가장 많은 장르부터 수락함(가장 횟수가 많은 곡 부터, 횟수 같으면 고유번호 작은것 부터 수락)
from collections import defaultdict
def solution(genres, plays):
answer = []
#genre_dict = {장르: [(재생횟수, 노래고유번호),..] }
genre_dict = defaultdict(list)
for i, genre, play_n in zip(range(len(genres)), genres, plays):
genre_dict[genre].append((play_n, i))
#genre_sort = 총 재생횟수가 가장 높은순으로 장르가 담겨있는 list
genre_sort = sorted(list(genre_dict.keys()), key = lambda x: -sum(map(lambda y: y[0], genre_dict[x])))
for genre in genre_sort:
#genre_dict의 값들을 가장 많이 재생된순으로 정렬 후, 노래번호가 가장 적은순으로 정렬
genre_dict[genre].sort(key = lambda x: (-x[0], x[1]))
#장르별로 노래 2개를 앨범에 추가
answer.extend([song_n for play_n, song_n in genre_dict[genre][:2]])
return answer
📝 두 풀이는 genre_sort를 구하는 점이 다름
=> 풀이방법2가 더 간결하지만 풀이방법1이 가독성이 좋다
Author And Source
이 문제에 관하여(프로그래머스 코딩테스트 고득점 Kit_해시_베스트앨범), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@himinhee/프로그래머스-코딩테스트-고득점-Kit해시베스트앨범저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)