{장르: 총 플레이 횟수}
딕셔너리를 생성한 후, 장르 별로 총 play 횟수에 따라서 내림차순 정렬을 해주었다. 장르 내에서 많이 재생된 노래를 먼저 수록
,장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록
이 2가지 조건을 만족하기 위해서 추출했던 배열을 또 정렬def solution(genres, plays):
answer = []
genre_play=dict()
# 장르별로 play 횟수
for idx, (k,v) in enumerate(zip(genres,plays)):
genre_play[k]=genre_play.get(k,0)+int(v)
# 장르별로 play 횟수 내림차순으로 정렬
play_list=sorted(genre_play.items(),key=lambda x:x[1], reverse=True)
# 많이 재생된 장르 순으로 for문 돌리기
for k,v in play_list:
song_arr=[]
# 재생횟수와 고유번호 넣어주기
for idx,(g, p) in enumerate(zip(genres,plays)):
if g==k:
song_arr.append([p,idx])
# 조건 2,3 을 고려한 정렬
song_arr.sort(key = lambda x : (-x[0],x[1]))
# 장르 별로 가장 많이 재생된 노래를 최대 2개 까지!
for i in range(min(len(song_arr),2)):
answer.append(song_arr[i][1])
return answer
사실, 이 문제를 4월 말에 풀어봤다가 결국에 해결 못하고 6개월이 지난 10월에서야 다 풀었다.
질문하기에 올려놓고 2분이나 답변해줬지만, 6개월이 지난 다음에야 감사하다고 답변하는 나란 사람,, too lazy,,
여튼 내가 4월 말에 풀지 못했던 이유는 딕셔너리를 제대로 정렬하지 못하여서였다.
처음에는 sorted에 딕셔너리 그대로를 넣어버렸는데,
# 장르별로 play 횟수 내림차순으로 정렬
play_list=sorted(genre_play,key=lambda x:x[1], reverse=True)
이렇게 풀면 key값으로 정렬이 된다고 한다!..! genre_play.items()
를 넣어서 풀어야 정답이었다고 한다.