문제 링크
내 풀이
# 1. 장르 별 재생 횟수 dict에 저장하기
# 2. 장르 안에서 재생수 순서로 append 하기
# 3. 재생수 순서로 배열하고, 고유 번호 순으로 오름차순하고 앞에거 먼저 append(장르별로 두개씩)
# 고유 번호가 index 값 (dict의 key로 써야할듯)
def solution(genres, plays):
play_time = {}
result = []
for genre, play in zip(genres, plays): # 어떤 장르가 가장 많이 재생됐나
if genre in play_time:
play_time[genre] += play
else:
play_time[genre] = play
# key를 재생 수로 배열
for key, value in sorted(play_time.items(), key = lambda x: x[1], reverse = True):
genre_play = {}
for i, genre in enumerate(genres): # 장르마다 고유번호 별 재생 횟수
if genre == key:
genre_play[i] = plays[i]
# value값 기준으로 내림차순
sorted_genre = sorted(genre_play.items(), key = lambda x: x[1], reverse = True)
if len(sorted_genre) >= 2: # 장르에 속한 곡이 하나라면, 하나의 곡만 선택
for i in range(2):
result.append(sorted_genre[i][0])
else:
result.append(sorted_genre[0][0])
return result
다른 풀이
def solution(genres, plays):
answer = []
genres_dict = {}
play_dict = {}
for i in range(len(genres)):
genre = genres[i]
play = plays[i]
if genre not in genres_dict:
genres_dict[genre] = []
play_dict[genre] = 0
genres_dict[genre].append((i,play))
play_dict[genre] += play
sorted_genres = sorted(play_dict.items(), key = lambda x : x[1], reverese = True)
for genre, _ in sorted_genres:
sorted_songs = sorted(genres_dict[genre], key = lambda x: (-x[1], x[0]))
answer.extend([idx for idx, _ in sorted_songs[:2]])
return answer
출처 : 코딩테스트 합격자 되기 파이썬 편, 저자: 박경록
댓글남기기