1. 문제
2. 풀이 과정
방법 1)
def solution(genres, plays):
answer = []
hash1 = {} #장르별 분류 [재생횟수, 고유번호] 쌍을 저장
hash2 = {} #장르별 속한 노래들의 재생 수의 합
for i in range(len(genres)):
#장르별 분류
if genres[i] not in hash1.keys():
hash1[genres[i]] = []
hash1[genres[i]].append([-plays[i], i]) #정렬하기 쉽게 재생 횟수를 -로 저장
#속한 노래들의 재생 수의 합
if genres[i] not in hash2.keys():
hash2[genres[i]] = 0
hash2[genres[i]] += plays[i]
#합이 큰 순서대로 장르 정렬
hash2 = sorted(hash2.keys(), key = lambda x : hash2[x], reverse = True)
#정렬된 장르들에 속한 노래들을 정렬하고 최대 2개 답에 넣기
for j in hash2:
hash1[j].sort()
for k in range(min(len(hash1[j]), 2)):
answer.append(hash1[j][k][1])
return answer
방법 2) 원리는 방법 1)과 같지만, 더 간결하게 나타낸 방법
def solution(genres, plays):
answer = []
hash_map = {k:[] for k in set(genres)}
for m in zip(genres, plays, range(len(plays))):
hash_map[m[0]].append([-m[1], m[2]])
key_set = sorted(hash_map.keys(), key = lambda x: sum(map(lambda y: y[0],hash_map[x])))
for k in key_set:
hash_map[k].sort()
for a in hash_map[k][:min(len(hash_map[k]), 2)]:
answer.append(a[1])
return answer
'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글
[Python] 이중우선순위큐 (0) | 2021.08.30 |
---|---|
[Python] 디스크 컨트롤 (0) | 2021.08.29 |
[Python] 타겟 넘버 (0) | 2021.08.29 |
[Python] 구명보트 (0) | 2021.08.28 |
[Python] 큰 수 만들기 (0) | 2021.08.28 |