https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 해결을 위한 과정

이 문제는 딕셔너리를 사용하면 쉽게 해결할 수 있었습니다. 장르를 키, 횟수를 값으로 하면 다음과 같습니다. 

classic: 1450, pop: 3100. 이때 전체의 genres 및 plays 리스트를 조회하면서 temp 리스트에 장르별 전체 재생 횟수, 고유번호, 노래재생 횟수를 넣습니다. 이렇게 되면 다음과 같습니다.

temp = [(1450, 3, 800), (3100, 1, 600), (1450, 2, 150), (1450, 3, 800), (3100, 4, 2500)] 

이 temp를 재생횟수 내림차순 - 같으면 곡 재생 횟수 내림차순 - 같으면 고유번호 오름차순으로 정렬을 합니다. 그렇게 되면 다음과 같이 됩니다.

temp = [(3100, 4, 2500), (3100, 1, 600), (1450, 3, 800), (1450, 0, 500), (1450, 2, 150)]

이후 각 장르별로 두 곡씩 answer에 담아서 return 하면 됩니다.


소스코드
def solution(genres, plays):
    answer = []
    music_dict = {}
    temp = []
    for i in range(len(genres)):
        if genres[i] not in music_dict:
            music_dict[genres[i]] = plays[i]
        else:
            music_dict[genres[i]] += plays[i]
    
    for i in range(len(genres)):
        temp.append((music_dict[genres[i]], i, plays[i]))
    
    temp.sort(key = lambda x: (-x[0], -x[2], x[1]))
    gen = {}
    for i in range(len(temp)):
        if temp[i][0] not in gen:
            gen[temp[i][0]] = 1
            answer.append(temp[i][1])
        elif temp[i][0] in gen:
            if gen[temp[i][0]] == 1:
                gen[temp[i][0]] += 1
                answer.append(temp[i][1])
            else:
                continue
    return answer

+ Recent posts