https://school.programmers.co.kr/learn/courses/30/lessons/42579
문제 해결을 위한 과정
이 문제는 딕셔너리를 사용하면 쉽게 해결할 수 있었습니다. 장르를 키, 횟수를 값으로 하면 다음과 같습니다.
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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 같은 숫자는 싫어 (Python) (0) | 2024.04.12 |
---|---|
프로그래머스 더 맵게 (Python) (0) | 2024.04.09 |
프로그래머스 최소직사각형(Python) (0) | 2024.04.07 |
프로그래머스 폰켓몬(Python) (0) | 2024.04.07 |
프로그래머스 전화번호 목록(Python) (1) | 2024.04.07 |