🌞Algorithm/🔥programmers

[programmers] 베스트앨범

뿌야._. 2021. 9. 10. 20:30

<베스트 앨범>

문제(출처: https://school.programmers.co.kr/learn/courses/30/lessons/42579)

 

 

 

문제 풀이

 

 - my solution

def solution(genres, plays):
    answer = []

    dic = {}
    for i in range(len(genres)):
        if genres[i] not in dic:
            dic[genres[i]] = plays[i]
        else:
            dic[genres[i]] += plays[i]
    dic = sorted(dic.items(), key=lambda x: -x[1])  # 많이 재생된 장르 순

    temp = []
    for i in range(len(genres)):  # list: 장르, 재생 횟수, 고유 번호
        temp.append([genres[i], plays[i], i])

    temp.sort(key=lambda x: (x[0], -x[1]))  # 정렬: 장르 이름 순, 재생 횟수 순

    for i in range(len(dic)):  # 장르별로 2개씩 고유 번호 출력
        cnt = 0
        for j in range(len(temp)):
            if temp[j][0] == dic[i][0]:
                answer.append(temp[j][2])
                cnt += 1
            if cnt >= 2:
                break

    return answer

 

 

1) 가장 많이 재생된 장르를 구하기 위해: dict로 각 장르별 재생 횟수를 구한 다음 정렬

 

2) list: [장르, 재생 횟수, 고유 번호]

 

3) 정렬: 장르 이름 순, 재생 횟수 순

 

4) 1번에서 구한 가장 많이 재생된 장르별로 3번 리스트에서 값을 구함

- 종료 조건: 2개씩 구하는 것이므로 2개 이상이면 break


생각🤔

 

Level 3라 어려울 것이라 생각했지만 생각보다 쉽게 풀 수 있었다.

이 코드로 문제를 통과했지만 다른 사람들의 코드를 보니 훨씬 짧게 푼 것을 볼 수 있었다.

코드를 간결하고 정확성 있게 풀 수 있도록 노력해야겠다. 🤔

 

내가 생각하기에 이 문제의 포인트

1) 정렬


출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges