👩‍💻 코테 공부/코테 공부

[코테 - py] 베스트 앨범

수댕ʕت̫͡ʔ 2024. 7. 27. 23:03

https://school.programmers.co.kr/learn/courses/30/lessons/42579

 

프로그래머스

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

programmers.co.kr

이번 문제는 해시 문제였다.

딕셔너리를 이용하여 원하는 정보를 담고, lambda를 이용해서 정렬해주면서 풀었다.

def solution(genres, plays):
    # 답을 넣을 리스트
    answer = []
    # 각 장르별 [인덱스, 재생 수]
    dic = {}
    # 각 장르별 합친 재생 수
    count = {}
    # 딕셔너리 채우기
    for i in range(len(plays)):
        if genres[i] not in dic:
            dic[genres[i]] = []
    for i in range(len(plays)):
        dic[genres[i]].append([i, plays[i]])
        if genres[i] not in count:
            count[genres[i]] = plays[i]
        elif genres[i] in count:
            count[genres[i]] += plays[i]
    # 각 장르별 합친 재생 수 기준으로 내림차순 정렬
    temp = []
    
    for a, b in count.items():
        temp.append([a, b])
        
    temp = sorted(temp, key=lambda x: -x[1])
    
    for a, b in temp:
        # 해당하는 장르의 [인덱스, 재생 수] 가져와서 정렬
        te = sorted(dic[a], key=lambda x: (-x[1], x[0]))
        co = 0
        # 2개만 담고, 2개보다 짧으면 그만큼 담기
        for j in range(len(te)):
            if co == 2:
                break
            answer.append(te[j][0])
            co += 1
        
    return answer

 

- 여기서 내가 놓쳤던 점은 각 장르별 곡이 2개 보다 적을 수 있다는 점이었다. 이 부분을 처리해줘야한다.

요즘 코딩 문제 푸는게 재밌다!ㅎㅎ