데이터사이언스 기록기📚

[프로그래머스/Python] Level 3_베스트앨범(해시) 본문

Coding Test/프로그래머스(Python)

[프로그래머스/Python] Level 3_베스트앨범(해시)

syunze 2024. 2. 5. 17:49

📌문제 유형

해시

 

📌문제

 

프로그래머스

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

programmers.co.kr

 

📌나의 문제풀이

- genres_total = {장르 : 장르 전체 합}

- list_ = {장르 : [재생횟수, 고유번호]}

- 각각의 dict 저장 -> for문으로 장르별 상위 2개 선정 -> genres_total 별 내림차순

def solution(genres, plays):
    answer = []
    result = []
    genres_total = {}
    list_ = {}
    
    for i in range(len(genres)):
        if genres[i] not in genres_total:
            genres_total[genres[i]] = plays[i]
            list_[genres[i]] = []
            list_[genres[i]].append([plays[i], i])
        else:
            genres_total[genres[i]] += plays[i]
            list_[genres[i]].append([plays[i], i])
            
    genres_total = sorted(genres_total.items() , key = lambda x : x[1], reverse = True)
    genres_total = dict(genres_total)
    list_ = sorted(list_.items(), key = lambda y : y[1], reverse = True)
    
    # 장르 100개 정도는 for문 가능
    for key, value in list_:
        value.sort(key = lambda x : (-x[0],x[1]))
        answer.append([genres_total[key],value[0][1]])
        if len(value) > 1:
            answer.append([genres_total[key],value[1][1]])
            
    answer.sort(key = lambda a : -a[0])
    
    for total, idx in answer:
        result.append(idx)
    
    return result

 

📌다른사람의 문제풀이

def solution(genres, plays):
    answer = []
    d = {e:[] for e in set(genres)}
    
    for e in zip(genres, plays, range(len(plays))):
        d[e[0]].append([e[1] , e[2]])
        
    genreSort =sorted(list(d.keys()), key= lambda x: sum( map(lambda y: y[0],d[x])), reverse = True)
    
    for g in genreSort:
        temp = [e[1] for e in sorted(d[g],key= lambda x: (x[0], -x[1]), reverse = True)]
        answer += temp[:min(len(temp),2)]
        
    return answer

 

📌리뷰

- 해시 문제는 대부분 정렬을 많이 이용

- set을 활용한 dict 초기화는 알아두기

728x90
Comments