https://programmers.co.kr/learn/courses/30/lessons/42579
알고리즘 분류
해쉬 자료구조
난이도
프로그래머스 Level 3
사용 언어
python 3
장르별 총 플레이 수를 확인할 sum_plays
와
장르별로 구분지어 고유 번호 및 play 수를 저장하는 genres_num
을 이용
genres_num
은 추후 정렬시 용이하도록 조금 복잡한 구조를 띔
def solution(genres, plays):
answer = []
sum_plays = {} # 장르별 총 플레이 수
genres_num = {} # 장르에 속한 고유번호 및 play 수
# = {'pop' : {'1':600, '4':2500},
# 'classic':...}
for i in range(len(genres)): # 노래 전체 탐색
if(genres[i] in sum_plays): # 이전에 같은 장르를 추가했다면
sum_plays[genres[i]] += plays[i]
genres_num[genres[i]][i] = plays[i]
else: # 해당 장르를 처음 추가한다면
sum_plays[genres[i]] = plays[i]
genres_num[genres[i]] = {i: plays[i]}
# 총 플레이 수에 따라 내림차순 정렬
sum_plays = sorted(sum_plays.items(), reverse=True, key = lambda item: item[1])
# 같은 장르 중 플레이 수에 따라 내림차순 정렬
for genre in genres_num:
genres_num[genre] = sorted(genres_num[genre].items(), reverse=True, key = lambda item: item[1])
# 정해진 순서대로 answer에 입력
for genre in sum_plays:
for i in range(min(2, len(genres_num[genre[0]]))):
answer.append(genres_num[genre[0]][i][0])
return answer
한번에 통과다 :)
python의 내장함수인 sorted를 사용하느라 구조가 조금 복잡해졌는데
다른 효율적인 sort기법을 사용할 수 있으면 더욱 이해하기 쉽게 진행 할 것으로 보임.
또한 정확성만 체크해줘서 효율적인 면이 어떤지는 잘 모르겠음. 개인적으로 아쉬운 부분