문제
https://programmers.co.kr/learn/courses/30/lessons/42579#
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
코드
def solution(genres, plays):
result = []
answer = []
dict_ = {}
# dict_ = { 장르 : [ ( 플레이 횟수, 고유 번호 ) ] }
played = {}
# dict_ = { 장르 : [ 전체 플레이 횟수 ] }
#dict_ 딕셔너리 초기화
for i in range(len(genres)):
if genres[i] in dict_.keys():
dict_[genres[i]] += [(i, plays[i])]
else:
dict_[genres[i]] = [(i, plays[i])]
#played 딕셔너리 초기화
for d in dict_:
for i in range(len(dict_[d])):
if d in played.keys():
played[d] += dict_[d][i][1]
else:
played[d] = dict_[d][i][1]
played = sorted(played.items(), key = lambda x: x[1], reverse = True)
for j in range(len(played)):
lst = sorted(list(dict_[played[j][0]]), key = lambda x:x[1], reverse = True)
if len(lst) >= 2:
result.append(lst[:2])
else:
result.append(lst[0])
for r in result:
for i in range(len(r)):
answer.append(r[i][0])
return answer
for문의 개수가 많아서 그런지 런타임 에러가 떴다.
반복문의 개수를 줄여야겠다.
def solution(genres, plays):
result = []
dict_ = {}
# dict_ = { 장르 : [ ( 플레이 횟수, 고유 번호 ) ] }
played = {}
# dict_ = { 장르 : [ 전체 플레이 횟수 ] }
#dict_ 딕셔너리 초기화
for i in range(len(genres)):
if genres[i] in dict_.keys():
dict_[genres[i]] += [(i, plays[i])]
else:
dict_[genres[i]] = [(i, plays[i])]
#played 딕셔너리 초기화
for d in dict_:
for i in range(len(dict_[d])):
if d in played.keys():
played[d] += dict_[d][i][1]
else:
played[d] = dict_[d][i][1]
played = sorted(played.items(), key = lambda x: x[1], reverse = True)
for j in range(len(played)):
lst = sorted(list(dict_[played[j][0]]), key = lambda x:x[1], reverse = True)
if len(lst) >= 2:
result.append(lst[0][0])
result.append(lst[1][0])
else:
result.append(lst[0][0])
return result
결과 리스트에 값을 추가하는 부분을 수정했더니 성공했다..!!
'⏳ 알고리즘 > python 알고리즘 문제 풀이' 카테고리의 다른 글
프로그래머스 - 로또의 최고 순위와 최저 순위( 2021 Dev-Matching ) (0) | 2021.10.31 |
---|---|
리트코드 - 19.Remove Nth Node From End of List (0) | 2021.08.29 |
프로그래머스 - [1차] 뉴스 클러스터링(카카오 2018 블라인드 채용) (0) | 2021.06.11 |
프로그래머스 - LV2. 예상 대진표(2017 팁스타운) (0) | 2021.06.11 |
프로그래머스 - LV2. 오픈채팅방(카카오 2019 블라인드 채용) (0) | 2021.06.07 |