CS/Algorithm 문제

[Programmers] 베스트앨범

[Programmers] 베스트앨범

 

🎈문제

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

💬설명

  • 조금의 생각이 필요한 문제였다.
  • python의 sort함수를 잘 이용하면 쉽게 풀 수 있다.
  • 간단하게 얘기하면 아래와 같다.
    1. 장르 이름을 key로 가지는 dictionary에 노래들을 [재생횟수, 고유 번호] 배열로 집어 넣는다. 장르별로 노래 총 재생횟수도 함께 세어준다.
    2. 노래가 많이 재생된 장르별로 정렬한다.
    3. 정렬된 장르별로 각 장르에 속하는 노래를 "재생횟수 -> 고유 번호" 순으로 정렬해서 최대 2개씩 answer 배열에 append 해준다.

👩‍💻코드

def solution(genres, plays):
    answer = []
    songs = {}
    genres_num = {}
    
    # 장르별로 노래 dictionary에 저장 [재생횟수, 고유 번호]
    for i in range(len(genres)):
        if genres[i] in songs:
            genres_num[genres[i]] += plays[i]
            songs[genres[i]].append([plays[i], i])
        else:
            genres_num[genres[i]] = plays[i]
            songs[genres[i]] = [[plays[i], i]]
            
    # 노래가 많이 재생된 장르별로 정렬
    sorted_num = sorted(genres_num.items(), key=lambda x: x[1], reverse=True)
    
    for genre in sorted_num:
        name = list(genre)[0]
        # 재생 횟수 -> 고유 번호 순으로 정렬
        songs[name].sort(key=lambda x: (-x[0], x[1]))
        
        # 정렬된 순으로 장르별 2곡씩 정답 변수에 append
        for i in range(len(songs[name])):
            if i == 2:
                break
            answer.append(songs[name][i][1])
    return answer

 

728x90
반응형

'CS > Algorithm 문제' 카테고리의 다른 글

[Programmers] 프린터  (0) 2021.10.07
[Programmers] 기능개발  (0) 2021.10.07
[Programmers] 위장  (0) 2021.10.07
[Programmers] 전화번호 목록  (0) 2021.10.07
[Programmers] 완주하지 못한 선수  (0) 2021.10.07