[Programmers 42579] 베스트앨범
문제
LV3 [Programmers 42579 - 베스트앨범]
문제 풀이 방법
이 문제는 hash와 sorting을 이용하면 쉽게 해결할 수 있다.
- genres와 plays 배열을 동시에 돌면서 dic에 ‘장르’ : [전체 장르 재생된 횟수의 합, [재생 횟수, 고유번호]] 형태로 저장한다.
- 속한 노래가 가장 많이 재생된 장르를 먼저 수록하므로 전체 장르 재생 횟수를 기준으로 dic을 정렬한다.
- 정렬된 dic를 순회하면서 각 장르 별로 정렬을 한다.
- 장르 내에서는 많이 재생된 노래 순으로 그리고 재생횟수가 같다면 고유번호가 낮은 노래 순으로 정렬한다.
- 만약 장르 내 노래의 개수가 1개라면 1개의 곡을 수록한다.
풀이 코드
Python
def solution(genres, plays):
answer = []
dic = {}
for i,(g,p) in enumerate(zip(genres, plays)):
if g in dic:
dic[g].append([p,i])
dic[g][0] += p
else:
dic[g] = [p, [p,i]]
dic = sorted(dic.items(), key=lambda item : item[1][0], reverse=True)
print(dic)
for d in dic:
tmp = sorted(d[1][1:], key=lambda x:(-x[0],x[1]))
if len(tmp) < 2:
answer.append(tmp[0][1])
else:
answer.extend([tmp[0][1], tmp[1][1]])
return answer
# print(solution(["classic", "pop", "classic", "classic", "pop"], [500, 600, 150, 800, 2500]))
print(solution(["classic", "pop", "classic", "classic", "pop", "test"], [500, 600, 150, 800, 2500, 100]))
# print(solution(["classic"], [300]))
댓글남기기