실패 여러 테스트 케이스에서 런타임 에러가 남
from operator import itemgetter
def solution(genres, plays):
album_list = []
for i in range(len(genres)):
album_list.append({
'genres': genres[i], 'play_value': plays[i], 'play_index': i
})
album_list = sorted(album_list, key=itemgetter('play_value'), reverse=True)
genre_dict = {}
for album in album_list:
if album['genres'] not in genre_dict:
genre_dict[album['genres']] = {'value': album['play_value']}
genre_dict[album['genres']]['index'] = [album['play_index']]
else:
genre_dict[album['genres']]['value'] += album['play_value']
if len(genre_dict[album['genres']]['index']) < 2:
genre_dict[album['genres']]['index'].append(album['play_index'])
genre_list = []
for genre in genre_dict:
genre_list.append(genre_dict[genre])
genre_list = sorted(genre_list, key=itemgetter('value'), reverse=True)
list = []
for i in genre_list:
list.append(i['index'][0])
list.append(i['index'][1])
return list
실패 또 다른 런타임 에러...
from operator import itemgetter
def solution(genres, plays):
album_dict = {}
genre_sum = {}
for i in range(len(genres)):
if genres[i] not in album_dict:
album_dict[genres[i]] = [{'music': [plays[i], i]}]
genre_sum[genres[i]] = plays[i]
else:
album_dict[genres[i]].append({'music': [plays[i], i]})
genre_sum[genres[i]] += plays[i]
genre_sum = sorted(genre_sum, key=genre_sum.get, reverse=True)
result = []
for j in genre_sum:
album_dict[j] = sorted(album_dict[j], key=itemgetter('music'), reverse=True)
for k in genre_sum:
result.append(album_dict[k][0]['music'][1])
result.append(album_dict[k][1]['music'][1])
return result
성공
key를 장르명, value를 index로 갖는 album_dict를 만들고 특정 장르의 총 재생 횟수를 누적하는 genre_sum을 만든다.
genre_sum의 item들을 총 재생횟수라는 value를 기준으로 정렬한다.
반환값은 list of tuple 형태로 genre_sum에 저장된다.
result에는 결과 값을 저장한다.
genre_sum에 있는 순서가 재생이 많이 된 장르 순이므로 for문을 돌린다.
album_dict에서 list of dict 형태의 특정 장르를 지정하고 정렬한다. 특정 장르에서 많이 재생 된 노래를 뽑아야 하므로 play라는 key의 값을 기준으로 내림차순, 같은 장르에서 재생 횟수가 같은 경우 index가 낮은 게 우선 순위가 높으므로 오름차순 정렬을 해준다.
특정 장르의 길이가 2 이상인 경우 두번째로 재생 횟수가 많은 노래의 index를 result에 추가한다.
from operator import itemgetter
def solution(genres, plays):
album_dict = {}
genre_sum = {}
for i in range(len(genres)):
if genres[i] not in album_dict:
album_dict[genres[i]] = [{'play': plays[i], 'i': i}]
genre_sum[genres[i]] = plays[i]
else:
album_dict[genres[i]].append({'play': plays[i], 'i': i})
genre_sum[genres[i]] += plays[i]
genre_sum = sorted(genre_sum.items(), key=itemgetter(1), reverse=True)
result = []
for i in genre_sum:
album_dict[i[0]] = sorted(album_dict[i[0]], key=lambda e: (-e['play'], e['i']))
result.append(album_dict[i[0]][0]['i'])
if len(album_dict[i[0]]) >= 2:
result.append(album_dict[i[0]][1]['i'])
return result
두 가지 key를 가지고 동시에 dict 정렬을 하는 방법을 몰라서 헤맸다.
'알고리즘 문제' 카테고리의 다른 글
프로그래머스 소수 찾기 (0) | 2019.08.29 |
---|---|
프로그래머스 모의고사 (0) | 2019.08.29 |
프로그래머스 위장 (0) | 2019.08.28 |
프로그래머스 전화번호 목록 (0) | 2019.08.28 |
프로그래머스 완주하지 못한 선수 (0) | 2019.08.27 |