728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42579#qna
genres: 음악 장르
plays: 재생 횟수
음악 장르를 key, 장르에 대한 전체 재생 횟수를 value로 딕셔너리를 만든다
def solution(genres, plays):
answer = []
dic = {}
#장르에 대해서 한 번
d = {}
for i in range(len(genres)):
d[genres[i]] = d.get(genres[i], 0) + plays[i]
value를 기준으로 정렬하기 위해 리스트로 바꾼다
딕셔너리.items() 구조 : 튜플 하나가 요소
dict_items([('classic', 1450), ('pop', 3100)])
x는 리스트의 하나하나 요소
x[0]은 장르
x[1]은 재생횟수
#리스트 형태로 변환
d=list(d.items())
#튜플 (x[0], x[1]) 형태를 x[1]을 기준으로 내림차순으로 정렬
d.sort(key=lambda x: x[1], reverse = True)
#재생횟수가 높은 장르부터 정렬된 리스트
d = [i[0] for i in d]
리턴값을 위해 딕셔너리를 사용하여 곡에 인덱스 번호 매기기
장르를 key로, 곡 인덱스를 넣은 리스트를 value로 저장
딕셔너리 value의 리스트는 알아서 오름차순으로 정렬됨
for gen in (set(genres)):
dic[gen] = []
for i in range(len(genres)):
dic[genres[i]].append(i)
가장 많이 재생된 장르부터 차례대로 for문으로 돈다.
장르 안에서 가장 많이 재생된 곡을 2개를 선택
#재생 수가 많은 장르부터 정렬된 리스트
for i in d:
#장르의 인덱스가 저장된 리스트
a= dic[i]
#재생 횟수를 기준으로 내림차순
a.sort(key=lambda x: (plays[x]), reverse = True)
#두 개만 추가
answer += a[:2]
return list(map(int, answer))
'코딩테스트 문제' 카테고리의 다른 글
[프로그래머스/Python] 야근 지수 (0) | 2024.02.20 |
---|---|
[프로그래머스/Python] 콜라츠 추측 (0) | 2024.02.20 |
[프로그래머스/Python] 기능개발 (0) | 2024.01.20 |
[프로그래머스/Python] 햄버거 만들기 (0) | 2024.01.20 |
[프로그래머스/Python] 카드 뭉치 (1) | 2024.01.11 |