풀이 과정
합계를 구하는 용인 딕셔너리(1)와, 각 장르별 노래를 저장할 딕셔너리(2)가 필요하다.
각 장르의 합계를 구할 때 순차적으로 방문하며 딕셔너리를 사용하여 더하고, 합계를 구함과 동시에 장르별 딕셔너리에 해당 노래를 넣어준다.
(1)의 딕셔너리의 items를 사용하여 키,값을 모두 받아온 다음, 값별로 내림차순 정렬해 준다. 이 때 키에는 장르, 값에는 합계가 들어 있다.
(1)의 items를 순차적으로 방문하면서(내림차순), (2)의 딕셔너리를 (1)의 key를 사용해서 받아온다. 이 때 받아오는 리스트에는 (재생횟수, 인덱스)형식으로 들어있으므로 받아있는 리스트 역시 재생횟수로는 내림차순, 인덱스로는 오름차순으로 정렬해 준다.
앞에서 2개까지만 answer에 저장해준다.
def solution(genres, plays):
answer = []
count_hash = {key:0 for key in set(genres)}
list_hash = {key:[] for key in set(genres)}
for idx, genre in enumerate(genres):
count_hash[genre] += plays[idx]
list_hash[genre].append([plays[idx], idx])
temp = list(count_hash.items())
temp.sort(key = lambda x:x[1], reverse=True)
for key, _ in temp:
cnt_list = list_hash[key]
cnt_list.sort(key = lambda x:(-x[0], x[1]))
for i, (_, idx) in enumerate(cnt_list):
answer.append(idx)
if i == 1: # 두개만
break
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 3 ] 섬 연결하기 (0) | 2021.07.17 |
---|---|
[ Lv 3 ] 다단계 칫솔 판매 (0) | 2021.07.17 |
[ Lv 3 ] N-Queen (0) | 2021.07.16 |
[ Lv 3 ] 2 x n 타일링 (0) | 2021.07.15 |
[ Lv 3 ] 등굣길 (0) | 2021.07.15 |