[프로그래머스] 베스트 앨범

rhkr9080·2023년 12월 3일
0

프로그래머스

목록 보기
12/19

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42579

💻 문제 풀이 : Python

⭐ 내 풀이
def solution(genres, plays):
    answer = []
    # 전체 정보 해쉬
    dic = {}
    # 장르의 속한 노래 해쉬
    dic_genre = {}
    
    for i in range(len(genres)):
        if dic.get(genres[i], 0) == 0:
            dic[genres[i]] = [[i, plays[i]]]
            dic_genre[genres[i]] = plays[i]
        else :
            dic[genres[i]].append([i, plays[i]])
            dic_genre[genres[i]] += plays[i]
    # 속한 노래가 많이 재생된 장르
    dic_genre = sorted(dic_genre.items(), key = lambda item : item[1], reverse=True)
    # 장르 내에서 / 많이 재생된 / 고유번호가 낮은 노래
    for key in dic.keys():
        dic[key] = sorted(dic[key], key = lambda x : (-x[1], x[0]))
    # 최대 두 곡 베스트 앨범 만들기    
    for key in dic_genre:
        if len(dic[key[0]]) >= 2:
            for i in range(2):
                answer.append(dic[key[0]][0][0])
                dic[key[0]].pop(0)
        else:
            answer.append(dic[key[0]][0][0])
            dic[key[0]].pop(0)

    return answer

📌 memo

  • Dict에 value를 list로 만들기
dic = {}
for i in range(len(genres)):
    # 해당 key가 비어있으면 리스트로 생성
	if dic.get(genres[i], 0) == 0:
        dic[genres[i]] = [[i, plays[i]]
    # 해당 key에 리스트가 있으면 뒤에 추가
    else :
        dic[genres[i]].append([[i, plays[i]])
  • Dict 정렬하기
    # item[0] : key / item[1] : value / 오름차순 : reverse = True
    dic_genre = sorted(dic_genre.items(), key = lambda item : item[1], reverse = True)
  • Dict 내부 list를 정렬하기
    # lambda로 했을 때 x 로 가정하면 / 내림차순 : x[i], 오름차순 : -x[i]
    for key in dic.keys():
    	dic[key] = sorted(dic[key], key = lambda item : (-item[1], item[0]))
profile
공부방

0개의 댓글