본문 바로가기
르탄즈 5기

[프로그래머스] 해시 - 베스트 앨범

by 박매트 2024. 1. 25.

 

나의 답

def solution(genres, plays):
    
    #장르별, 총 재생횟수를 담을 리스트
    dic = {}
    
    #[장르, 재생횟수] 묶은 리스트
    music = []
    
    #장르별, 재생횟수를 0으로 초기화
    for i,value in enumerate(genres):
        dic[value]=0
    
    #장르별, 재생횟수의 총합을 구함
    #[장르, 재생횟수]를 묶어 music에 append
    for i,value in enumerate(genres):
        dic[value]+=plays[i]
        music.append([value, plays[i]])
    
    #장르별 재생횟수에서, value(재생횟수)에 맞춰, 내림차순으로 정렬
    dic = sorted(dic.items(), key=lambda x: x[1],reverse=True)
    
    #정답을 담을 배열
    answer = []
    
    #장르별 재생횟수에서, 장르(key)를 이용함
    for gen in dic:
        
        #장르(key)별 plays 값을 담을 배열
        ha = []
        
        #[장르, 재생횟수]로 묶인 배열을 활용
        for mu in music:
            # 각 장르에 해당하는 재생횟수를 더해나감
            if gen[0]==mu[0]:
                ha.append(mu[1])
        #모여진 각 재생횟수를 내림차순으로 정렬
        ha.sort(reverse=True)
        
        #재생횟수는 2개까진 보여지게 슬라이싱
        ha = ha[:2]
        
        # 재생횟수의 숫자에 맞게 plays에서 index를 찾아나감
        for re in ha:
            # 동일한 값이 있을 경우를 대비하여, filter 함수를 이용
            # 동일한 값에 따른 각 index를 리스트 형태로 반환
            search = list(filter(lambda x: plays[x] == re, range(len(plays))))
            # 동일한 값이 2개 이상 있을 경우, 오름차순으로 정렬하여 answer에 더해나간다.
            if len(search)>=2:
                search.sort()
                search=search[:2]
                for i in search:
                    answer.append(i)
                break
            else: #1개만 있을경우에는 그냥 바로 index 찾아서 answer에 더하기
                answer.append(plays.index(re))
    
    
    return answer

 

굉장히 덕지덕지 코드라, 맞는 지는 모르겠지만 테스트를 통과하였다...ㅋㅋㅋ

아직 함수를 잘 몰라서 이용을 잘 못하겠다.

 

다른 사람 풀이

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

    dic1 = {}
    dic2 = {}

    for i, (g, p) in enumerate(zip(genres, plays)):
        if g not in dic1:
            dic1[g] = [(i, p)]
        else:
            dic1[g].append((i, p))

        if g not in dic2:
            dic2[g] = p
        else:
            dic2[g] += p

    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)

    return answer

 

와 이렇게 간단하게 함수를 써서 풀 수 있다니..

 

'르탄즈 5기' 카테고리의 다른 글

[르탄즈 5기] 1/26 TIL  (1) 2024.01.26
[르탄즈 5기] 1/25 TIL  (1) 2024.01.25
[르탄즈 5기] 1/24 TIL  (1) 2024.01.24
[르탄즈 5기] 1/23(화) TIL  (1) 2024.01.23
[르탄즈 5기] 1/22 TIL  (1) 2024.01.22