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

.·2022년 6월 22일
0

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


사고 과정

  • 우선 가장 많이 재생된 장르를 구하는 딕셔너리를 만들었다. 그리고 index를 key로하고, ('장르', '노래 재생 횟수', '이 장르가 재생된 총 횟수')를 value로 하는 딕셔너리를 만들었다.
  • 만든 딕셔너리를 장르가 재생된 총 횟수, 노래 재생 횟수 순으로 내림차순으로 정렬했다.(sorted를 사용하면 list가 되므로 dict로 다시 만들었다.)
  • 정답을 담을 리스트와 장르별로 두 개씩만 담기 위해 각 장르가 몇 개 담겼는지 확인하기 위한 딕셔너리를 선언하고, 만약 딕셔너리에 장르가 없거나 장르가 2개 미만으로 담겨있다면 정답 리스트에 그 인덱스를 추가했다.

나의 풀이

def solution(genres, plays):
	# 장르별로 재생된 전체 횟수 구하기
    total_plays = {}
    for i in range(len(genres)):
        if genres[i] not in total_plays:
            total_plays[genres[i]] = plays[i]
        else:
            total_plays[genres[i]] += plays[i]
    
    # {index:('장르', '노래 재생 횟수', '이 장르가 전체 재생된 횟수') 형태의 딕셔너리 만들어서 정렬
    total = {}
    for idx, value in enumerate(genres):
        if idx not in total:
            total[idx] = (value, plays[idx], total_plays[value])

    total = dict(sorted(total.items(), key = lambda x : (-x[1][-1], -x[1][1], x[1][0])))
    
    # 장르가 두 개씩만 담겨야하기 때문에 그걸 세기 위한 answer_dict를 만들어서 answer에 인덱스 추가
    answer = []
    answer_dict = {}
    for key, value in total.items():
        if value[0] not in answer_dict:
            answer.append(key)
            answer_dict[value[0]] = 1
        elif answer_dict[value[0]] < 2:
            answer_dict[value[0]] += 1
            answer.append(key)
        else:
            continue
    return answer

0개의 댓글