-
[해시] 베스트앨범알고리즘/프로그래머스 2021. 9. 4. 15:52
https://programmers.co.kr/learn/courses/30/lessons/42579#
1. 인덱스가 key이고, 재생횟수가 value인 딕셔너리dic을 만든다. #{'0' : 500}
- {0: 500, 1: 600, 2: 150, 3: 800, 4: 2500}
2. 장르가 key이고, 재생횟수 리스트가 value인 딕셔너리 music_dic을 만든다.
- {'classic': [500, 150, 800], 'pop': [600, 2500]}
3. music_dic에 대해 값인 재생횟수 리스트를 내림차순으로 정렬한다.
- {'classic': [800, 500, 150], 'pop': [2500, 600]}
4. music_dic에 장르별 재생횟수의 총합을 내림차순으로 정렬한다.
- [('pop', [2500, 600]), ('classic', [800, 500, 150])]
5. 조건에 맞게 정렬된 music_dic을 차례로 돌며, 장르별 두개씩 추가, 만약 장르 내에서 재생횟수가 같은 노래가 있을 수 있으므로, temp리스트에 해당 재생횟수의 인덱스를 모두 찾아 추가 후, 인덱스 순으로 정렬 후 [:2]까지만 추가
- if not temp[0] in answer을 하는 이유는, 같은 인덱스 리스트를 중복추가하는 경우를 제외하기 위함이다.
def solution(genres, plays): dic = {} for i in range(len(plays)): dic[i] = plays[i] music_dic = {} _ = 0 for i in genres: music_dic.setdefault(i, []) music_dic[i].append(dic[_]) _ += 1 for i in music_dic: music_dic[i] = sorted(music_dic[i], reverse=True) music_dic = sorted(music_dic.items(), key=lambda x: sum(x[1]), reverse=True) answer = [] for i in range(len(music_dic)): for j in list(music_dic[i][1][:2]): temp = [] for k in dic: if dic[k] == j: temp.append(k) if not temp[0] in answer: answer += map(int, sorted(temp)[:2]) return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[정렬] K번째수 / 가장 큰 수 / H-Index (0) 2021.09.05 [해시] 완주하지 못한 선수 / 전화번호 목록 / 위장 (0) 2021.09.04 [위클리 챌린지] 3주차 (0) 2021.08.29 [위클리 챌린지] 2주차 (0) 2021.08.25 [위클리 챌린지] 4주차 (0) 2021.08.24