[프로그래머스]해시/베스트앨범(python)

Effy_ee·2023년 8월 1일
0

코딩테스트

목록 보기
34/118

📖 문제

해시(Lv.03) 베스트앨범 👾
https://school.programmers.co.kr/learn/courses/30/lessons/42579

💻답안

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

    dic1 = {}
    dic2 = {}


    for i, (g, p) in enumerate(zip(genres, plays)):
         #{장르1:(고유번호,재생횟수)}의 형태
        if g not in dic1:
            dic1[g] = [(i, p)]
        #{장르2:(고유번호,재생횟수)},{장르2:(고유번호,재생횟수)}의 형태
        #{'classic': [(0, 500), (2, 150), (3, 800)], 'pop': [(1, 600), (4, 2500)]}
        else:
            dic1[g].append((i, p))
         #{장르1:재생횟수}의 형태
        #{'classic': 1450, 'pop': 3100}
        if g not in dic2:
            dic2[g] = p
        else:
            dic2[g] += p

    # 재생횟수 기준 내림차순으로 정렬한다
    # 재생된 장르 k의 고유번호,재생횟수를 가져온다
    # 재생횟수에 따라서 내림차순으로 정렬한다
    for (k, v) in sorted(dic2.items(), key=lambda x:x[1], reverse=True):
        for (i, p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
            answer.append(i)
    print(dic1)
    return answer

💡배운점

dic2 = {'classic': 1450, 'pop': 3100}
for (k, v) in sorted(dic2.items(), key=lambda x: x[1], reverse=True):
  1. dic2.items()
    딕셔너리 dic2의 모든 키-값 쌍을 가져옵니다.

  2. sorted(dic2.items(), key=lambda x: x[1], reverse=True):

dic2.items()로 얻어진 키-값 쌍들을 값(value)에 따라 내림차순으로 정렬합니다. key=lambda x: x[1] 부분은 정렬 기준을 지정하는데, 여기서 x는 딕셔너리의 키-값 쌍을 의미하며, x[1]은 각 쌍의 값에 해당합니다. 즉, 값에 따라 정렬하도록 지정한 것입니다. reverse=True는 역순으로 정렬하라는 의미입니다. 따라서, 값에 따라 내림차순으로 정렬된 결과를 반환합니다.

딕셔너리 dic2의 값에 따라 내림차순으로 정렬된 결과는 다음과 같습니다:

#결과
[('pop', 3100), ('classic', 1450)]

#dic1
dic1 = {'classic': [(0, 500), (2, 150), (3, 800)], 'pop': [(1, 600), (4, 2500)]}

for (i, p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
  1. dic1[k]: 딕셔너리 dic1에서 특정 장르를 나타내는 키 k에 해당하는 값, 즉 해당 장르의 곡들을 가져옵니다.

  2. sorted(dic1[k], key=lambda x: x[1],reverse=True):
    dic1[k]로 얻어진 곡들을 재생 횟수에 따라 내림차순으로 정렬합니다. key=lambda x: x[1] 부분은 정렬 기준을 지정하는데, 여기서 x각 곡을 의미하며, x[1]각 곡의 재생 횟수에 해당합니다. 즉, 재생 횟수에 따라 정렬하도록 지정한 것입니다. reverse=True는 역순으로 정렬하라는 의미입니다. 따라서, 재생 횟수에 따라 내림차순으로 정렬된 결과를 반환합니다.
    sorted(dic1[k], key=lambda x: x[1], reverse=True)[:2]: 정렬된 결과 중 상위 2개의 곡만 선택합니다. 이를 통해 재생 횟수가 가장 많은 상위 2개의 곡을 얻을 수 있습니다.
    for (i, p) in sorted(dic1[k], key=lambda x: x[1], reverse=True)[:2]:: 상위 2개의 곡에 대해 반복문을 실행하면서, 각 곡의 인덱스 i와 재생 횟수 p를 언패킹하여 사용합니다.
    따라서, 위 코드를 실행하면 'classic' 또는 'pop' 장르에 대해 재생 횟수에 따라 내림차순으로 정렬된 두 곡의 정보가 순서대로 (i, p) 형태로 출력됩니다.

0개의 댓글