알고리즘 문제풀이
프로그래머스 베스트앨범 파이썬
dolchimdae
2022. 4. 9. 17:23
반응형
https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
<소스 코드>
def solution(genres, plays):
answer = []
n = len(genres)
d = {}
# 각 장르별 총 재생횟수 구해 정렬
for i in range(n):
if genres[i] in d:
d[genres[i]] += plays[i]
else:
d[genres[i]] = plays[i]
d1 = sorted(d.items(), key=lambda x: x[1], reverse = True)
for d in d1: # 총 재생횟수가 큰 장르부터
data = []
for i in range(n): # 해당 장르의 plays 와 index 튜플 배열 모아
if genres[i] == d[0]:
data.append((plays[i],i))
# 정렬하는데 1순위를 재생횟수 내림차순, 2순위 고유번호 오름차순
d2 = sorted(data, key = lambda x : (-x[0],x[1]))
# 정렬된 해당 장르에 대한 배열을 answer 에 덧붙인다
if len(d2) == 1: # 속한 곳이 하나인 경우 고려
answer.append(d2[0][1])
else:
answer.append(d2[0][1])
answer.append(d2[1][1])
return answer
<풀이>
1. 사전 자료형을 통해 각 genre 별 plays 를 구해 정렬한다.
2. 정렬된 각 genre 에 대해, genres 배열을 돌며 같은 genre 면 해당되는 (play, index) 을 data 에 추가한다.
3. (play,index) 배열인 data 를 재생횟수 내림차순, 고유번호 오름차순 우선순위로 정렬한다.
4. 위 배열에서 곡 수가 하나면 하나, 아니면 앞에서 두 곡을 answer 배열에 덧붙인다.
5. 다음으로 큰 genre 에 대해 2~4 를 반복한다.
반응형