728x90
반응형
문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/42579
문제 풀이:
def solution(genres, plays):
dic = {}
dic_sum = {}
for i, (genre, play) in enumerate(zip(genres, plays)):
if genre not in dic:
dic[genre] = [(i,play)]
else:
dic[genre].append((i,play))
if genre not in dic_sum:
dic_sum[genre] = play
else:
dic_sum[genre] += play
res = []
for x, y in sorted(dic_sum.items(), key=lambda x:x[1], reverse=True): # 장르 별 큰 값으로 정렬
for a, b in sorted(dic[x], key=lambda x:x[1], reverse=True)[:2]:
res.append(a)
return res
dic = {}
dic_sum = {}
dic은 고유번호 플레이 시간 저장
dic_sum은 장르별 총 합 저장
for i, (genre, play) in enumerate(zip(genres, plays)):
if genre not in dic:
dic[genre] = [(i,play)]
else:
dic[genre].append((i,play))
if genre not in dic_sum:
dic_sum[genre] = play
else:
dic_sum[genre] += play
i 는 고유번호 genre ,play 는 장르와 플레이시간
첫 번째 if문은 고유번호와 플레이시간을 추가해준다
두 번째 if문은 총 플레이시간을 추가해준다.
res = []
for x, y in sorted(dic_sum.items(), key=lambda x:x[1], reverse=True): # 장르 별 큰 값으로 정렬
for a, b in sorted(dic[x], key=lambda x:x[1], reverse=True)[:2]:
res.append(a)
return res
첫 포문은 장르별 총 플레이시간 ex)클래식 3000, 팝 2000, 이렇게 정렬해주고
정렬한거에서 2개씩 가져와야하니깐
dic[x] 만약 클래식이 제일 많다면 클래식 안에서 플레이시간 높은거 2개를 뽑아와야하므로
키 람다식과 슬라이싱으로 잘라서 2개까지 넣어준다.
반응형
댓글