본문 바로가기
스터디/알고리즘

베스트앨범

by 세졍 2024. 5. 1.

문제이해
가장많이 재생된 장르부터 2개씩 출력
장르에서는 많이재생된순으로
재생된수같으면 고유번호가 낮은순으로 출력 

 

 

해시맵

1. [장르이름,재생횟수,고유번호] 를 담은 arr배열생성

2. 재생횟수로는 내림차순, 고유번호순으로는 오름차순하기

3. {'장르이름':재생횟수} 이런식의 해쉬맵 생성 -> 재생횟수높은거부터 나오도록 내림차순

4. 해쉬맵과 arr로 비교해서 두개씩 고유번호 출력하기 

 


genres = ["classic", "pop", "classic", "classic", "pop"]
plays = [500, 600, 150, 800, 2500]
answer = []
arr = []
hashmap = {} # 장르이름이 키이고 재생횟수가 value인 해쉬맵생성
for i in range(len(genres)):
    arr.append([genres[i], plays[i], i])
arr = sorted(arr,key=lambda x: (-x[1],x[2]))
# 많이재생된순으로 내림차순, 고유번호순으로 오름차순
# print(arr) [['pop', 2500, 4], ['classic', 800, 3], ['pop', 600, 1], ['classic', 500, 0], ['classic', 150, 2]]

for i in arr:
    if i[0] not in hashmap:
        hashmap[i[0]] = i[1]
    else:
        hashmap[i[0]] += i[1]
# print(hashmap) {'pop': 3100, 'classic': 1450} # 재생횟수 많은순으로 정렬하기
hashmap = sorted(hashmap.items(),key=lambda x : x[1],reverse=True)
# print(hashmap) [('pop', 3100), ('classic', 1450)]

for i in hashmap:
    cnt = 0
    for j in arr:
        if i[0] == j[0]:
            cnt += 1
            if cnt > 2:
                break
            else:
                answer.append(j[2])
print(answer)

 

 

* 오름차순 lambda 다시보기 *

'스터디 > 알고리즘' 카테고리의 다른 글

입국심사  (0) 2024.05.04
프로세스  (0) 2024.05.02
랜선 자르기  (0) 2024.04.23
신입사원  (0) 2024.04.17
케빈 베이컨의 6단계 법칙  (0) 2024.03.21