[Programmers] 베스트앨범
🎈문제
https://programmers.co.kr/learn/courses/30/lessons/42579
💬설명
- 조금의 생각이 필요한 문제였다.
- python의 sort함수를 잘 이용하면 쉽게 풀 수 있다.
- 간단하게 얘기하면 아래와 같다.
- 장르 이름을 key로 가지는 dictionary에 노래들을 [재생횟수, 고유 번호] 배열로 집어 넣는다. 장르별로 노래 총 재생횟수도 함께 세어준다.
- 노래가 많이 재생된 장르별로 정렬한다.
- 정렬된 장르별로 각 장르에 속하는 노래를 "재생횟수 -> 고유 번호" 순으로 정렬해서 최대 2개씩 answer 배열에 append 해준다.
👩💻코드
def solution(genres, plays):
answer = []
songs = {}
genres_num = {}
# 장르별로 노래 dictionary에 저장 [재생횟수, 고유 번호]
for i in range(len(genres)):
if genres[i] in songs:
genres_num[genres[i]] += plays[i]
songs[genres[i]].append([plays[i], i])
else:
genres_num[genres[i]] = plays[i]
songs[genres[i]] = [[plays[i], i]]
# 노래가 많이 재생된 장르별로 정렬
sorted_num = sorted(genres_num.items(), key=lambda x: x[1], reverse=True)
for genre in sorted_num:
name = list(genre)[0]
# 재생 횟수 -> 고유 번호 순으로 정렬
songs[name].sort(key=lambda x: (-x[0], x[1]))
# 정렬된 순으로 장르별 2곡씩 정답 변수에 append
for i in range(len(songs[name])):
if i == 2:
break
answer.append(songs[name][i][1])
return answer
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[Programmers] 프린터 (0) | 2021.10.07 |
---|---|
[Programmers] 기능개발 (0) | 2021.10.07 |
[Programmers] 위장 (0) | 2021.10.07 |
[Programmers] 전화번호 목록 (0) | 2021.10.07 |
[Programmers] 완주하지 못한 선수 (0) | 2021.10.07 |