programmers- lv.3 (베스트앨범)

이예송·2023년 9월 4일

PS

목록 보기
92/97

문제링크: 베스트앨범

✍🏻 Information

content
언어python
난이도⭐️⭐️⭐️
풀이시간60분?
제출횟수
인터넷검색유무yes




🍒 My Code

def solution(genres, plays):
    answer = []
    song = {} #key:장르, value:(고유번호,재생된횟수)
    sum_song = {} #key:장르 총 재생횟수, value:(고유번호,재생된횟수)
    #song dictionary 초기화
    for i in range(len(genres)):
        if genres[i] not in song:
            song[genres[i]]=[(i,plays[i])]
        else:
            song[genres[i]].append((i,plays[i]))
    for i in song.values():
        #재생된 횟수를 기준으로 sorting. (고유번호,재생횟수)로 담겨있음.
        k = sorted(i,key=lambda x: x[1],reverse=True)
        #key는 해당 장르의 총 재생횟수, value는 해당 장르에서 재생횟수가 가장 높은 2개
        sum_song[sum([j[1] for j in k])]= k[:2] #상위 2개만 뽑음
    #장르 총 재생횟수 높은 순으로 sorting
    sum_song = dict(sorted(sum_song.items(),reverse=True))
    #고유번호만 뽑아서 answer에 append
    for i in sum_song.values():
        for j in i:
            answer.append(j[0])
    return answer




💡 What I learned

  • key 기준으로 오름차순 정렬: dict(sorted(dic.items()))
  • value 기준으로 오름차순 정렬: dict(sorted(dic.items(), key=lambda x:x[1]))
    -> value가 1개일 경우에만 가능
  • 좋다고 생각한 풀이
def solution(genres, plays):
    answer = []

    dic1 = {}
    dic2 = {}

    for i, (g, p) in enumerate(zip(genres, plays)):
        if g not in dic1:
            dic1[g] = [(i, p)]
        else:
            dic1[g].append((i, p))

        if g not in dic2:
            dic2[g] = p
        else:
            dic2[g] += p

    for (k, v) in sorted(dic2.items(), key=lambda x:x[1], reverse=True):
        for (i, p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
            answer.append(i)

    return answer

0개의 댓글