728x90
풀이
def solution(genres, plays):
answer = []
d = {} #{"장르": {고유번호 : 횟수}, {고유번호 : 횟수} ...}
genre_cnt = {} #{"장르" : "전체 횟수"}
for i in range(len(plays)): # 중첩 딕셔너리 선언
d[genres[i]] = {}
for i in range(len(genres)):
d[genres[i]][i] = plays[i]
if genres[i] in genre_cnt:
genre_cnt[genres[i]] += plays[i]
else:
genre_cnt[genres[i]] = plays[i]
sorted_genre = sorted(genre_cnt.items(), key=lambda x: x[1], reverse=True)
for i in range(len(sorted_genre)):
sorted_d = sorted(d[sorted_genre[i][0]].items(), key=lambda x: (-x[1], x[0])) #횟수는 내림차순, 값은 오름차순
try:
answer.append(sorted_d[0][0])
answer.append(sorted_d[1][0])
except IndexError:
continue
return answer
내 풀이
- 중첩 딕셔너리 사용
- 중첩 딕셔너리는 선언과 동시에 값 넣는게 안된다고 해서 선언을 따로 함
- genre_cnt에 장르별 전체 횟수를 저장하고, 횟수를 내림차순으로 정렬해서 sorted_genre에 저장.(제일 많은 게 젤 앞에 있음)
- sorted_genre에 저장된 장르 순서대로 answer에 두개씩 집어넣음. 이때, 장르에 노래가 하나 있는 경우 out of list 에러가 발생하므로 try except 문으로 처리.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 모의고사 (python) (0) | 2024.01.17 |
---|---|
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 최소직사각형 (python) (0) | 2024.01.17 |
[프로그래머스 코딩테스트 고득점 Kit / 해시] 의상 (python) (0) | 2024.01.13 |
[프로그래머스 코딩테스트 고득점 Kit / 해시] 전화번호 목록 (python) (1) | 2024.01.10 |
[프로그래머스 코딩테스트 고득점 Kit / 해시] 폰켓몬 (python) (0) | 2024.01.10 |