- 장르별 누적재생횟수 구하기 -> 최다 누적 재생횟수의 장르가 먼저 수록
- 장르별 수록 곡 목록 만들기
- 수록곡 중 재생횟수가 높은 두 곡을 뽑아 앨범에 넣기
3'. 만약 재생횟수가 같다면 작은 인덱스의 곡 넣기
def solution(genres, plays):
result = []
dic = {}
for g, p in zip(genres, plays):
dic[g] = dic[g] + p if g in dic else p
order = sorted(dic.items(), key=lambda x: x[1], reverse=True)
order = map(lambda x:x[0], order)
for o in order:
musics = []
for i, genre in enumerate(genres):
if(o == genre):
musics.append((i, plays[i]))
tmp = sorted(musics, key=lambda x:x[1], reverse=True)[:2]
tmp = list(map(lambda x:x[0], tmp))
result += tmp
return result
파이썬의 문법을 익히기 위해서 간결하게 짠 코드를 주로 참고하도록 하자. 익숙해지면 가독성이 더 좋은 코드를 중점으로 보고.
def solution(genres, plays):
answer = []
d = {e:[] for e in set(genres)}
for e in zip(genres, plays, range(len(plays))):
d[e[0]].append([e[1] , e[2]])
genreSort =sorted(list(d.keys()), key= lambda x: sum(map(lambda y: y[0],d[x])), reverse = True)
for g in genreSort:
temp = [e[1] for e in sorted(d[g],key= lambda x: (x[0], -x[1]), reverse = True)]
answer += temp[:min(len(temp),2)]
return answer
- set(genres)로 중복을 제거하고 딕셔너리의 포맷을 설정한다.
- 딕셔너리에 같은 인덱스의 장르와 재생횟수 그리고 인덱스를 삽입한다.
장르 : [재생횟수, 인덱스]
- 딕셔너리의 키(장르)만 가져와서 값의 0번째 인덱스(재생횟수)를 추출해 모두 더해주고, 결과를 내림차순 정렬한다.
- 장르의 순서대로 수록곡 중 두 곡을 선택해야 한다.
lambda x: (x[0], -x[1])
에서 먼저x[0]
인 재생횟수를 먼저 고려하고, 재생횟수가 같을 경우x[1]
인 인덱스를 비교한다.x[1]
에-
를 붙인 것은 뒤에reverse=True
로 되어있기 때문에 인덱스가 작은 값을 큰 값으로 함을 명시한 것이다.-
가 없으면 인덱스가 큰 순으로 정렬된다.