알고리즘/programmers

20210316_코테공부

jungeun960 2021. 3. 16. 17:32

프로그래머스 - 해시

# 위장 (Level2)

def solution(clothes):
    answer = 1
    dic = {}
    for name, kind in clothes:
        if kind in dic:
            dic[kind] +=1
        else: dic[kind] = 1
    for i in dic.values():
        answer *=(i+1)

    return answer-1

 

# 베스트 앨범 (Level3)

  • Point. 딕셔너리, 딕셔너리 정렬
  1. 많이 재생된 장르 먼저 수록
  2. 장르 내에서 많이 재생된 노래 먼저 수록
  3. 장르별로 두 개씩(하나만 있으면 하나만)
def solution(genres, plays): 
    answer = [] 
    dic = {} # 장르 : (재생횟수, 고유번호)
    dic_count = {} # 장르별 재생횟수
    
    for i, (g,p) in enumerate(zip(genres, plays)):
        if g in dic:
            dic[g].append((p,i))
            dic_count[g] += p
        else:
            dic[g] = [(p,i)]
            dic_count[g] = p
    print(dic)
    print(dic_count)

    # 많이 재생된 장르순 정렬
    sorted_dic = sorted(dic_count.items(), key=lambda x: x[1], reverse=True) 
    print(sorted_dic) 
    
    for key in sorted_dic: # key값에 ('pop', 3100)
        play_list = dic[key[0]] #key[0]으로 해야 pop나옴
        print(play_list)

        # 많이 재생된 노래순 정렬
        play_list = sorted(play_list, key = lambda x : x[0], reverse=True)
        print(play_list)
        
        for i in range(len(play_list)): # 두개만 뽑아오기
            if i == 2: 
                break 
            answer.append(play_list[i][1]) 
            
    return answer

 

반응형