코딩테스트 문제

[프로그래머스/Python] 베스트 앨범

왕초보코딩러 2024. 1. 20. 21:44
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42579#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


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))