코딩테스트 베스트앨범 문제풀이
프로그래머스 베스트앨범(level 3) 문제풀이
def solution(genres, plays):
data ={}
answer = []
s=[]
n = len(genres)
for i in range(n):
if genres[i] not in data:
data[genres[i]] = [[(plays[i], i)], plays[i]]
else:
data[genres[i]][1] += plays[i]
data[genres[i]][0].append((plays[i], i))
for i in data:
s.append((data[i][1], i))
s.sort()
for i in range(len(s)):
f = s.pop()[1]
data[f][0].sort(key = lambda x: (x[0], -x[1]))
# -x[1]은 고유번호 내림차순으로 정렬
answer.append(data[f][0].pop()[1])
if data[f][0]:
answer.append(data[f][0].pop()[1])
return answer
각각의 장르들로 key를 만들고 value로 (곡의 재생횟수, 고유번호)를 넣었다. 그리고 장르의 총 재생횟수를 정렬하고, 또 그 안에서 각 곡들의 재생횟수가 높은 횟수로 정렬한다. 그리고 각 곡의 재생횟수가 같으면 고유번호가 낮은 순으로 정렬해야 하므로 key = lambda x: (x[0], -x[1])로 해 주었다.
여기서 배운 점이 여러 조건의 정렬과 내림차순으로 하고 싶을 시에 -x를 해주면 된다는 것이다
Author And Source
이 문제에 관하여(코딩테스트 베스트앨범 문제풀이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kokodak/코딩테스트-베스트앨범-문제풀이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)