📖 문제
🧑🏻💻 풀이 과정
1) 문제 접근 및 이해
주어진 장르와 노래를 함께 반복시켜, 장르별로 노래를 모으고 총 재생시간을 기록하였습니다.
이후 장르별로 총 재생기간을 비교하여 가장 많이 재생된 장르순서대로 정렬하였습니다.
마지막으로 장르별로 가장 많이 재생된 노래를 2개씩 꺼내서 정답에 추가하였습니다.
2) 알고리즘
- 구현
3) 풀이 코드
사용 언어 - Python
def solution(genres, plays):
genre_dict = {} # 장르별 플레이 리스트, 장르: {플레이리스트, 총 플레이 시간}
genre_plays = [] # 장르별 총 플레이 시간
answer = [] # 정답 리스트
for idx in range(len(genres)): # 입력으로 주어지는 모든 장르들 반복
genre = genres[idx]
play = plays[idx]
if not genre_dict.get(genre, False): # 아직 나온적 없는 장르라면, 딕셔너리에 키값과 기본 값 추가
genre_dict[genre] = {'plays': [], 'total_play': 0}
genre_dict[genre]['plays'].append((play, idx)) # 현재 노래 플레이 시간, 고유 번호
genre_dict[genre]['total_play'] += play # 현재 노래 플레이 시간을 총 플레이 시간에 추가
for k, v in genre_dict.items(): # 장르별로 반복하며
genre_plays.append((k, v['total_play'])) # (장르, 총 플레이시간) 형태로 리스트에 추가
genre_plays.sort(key=lambda x: x[1], reverse=True) # 총 플레이시간을 기준으로 내림차순 정렬
for genre, _ in genre_plays:
play = sorted(genre_dict[genre]['plays'], key=lambda x: x[1], reverse=True) # 노래 고유번호 기준으로 내림 차순
play = sorted(play, key=lambda x: x[0]) # 노래 플레이 시간 기준으로 오름 차순
# 가장 많이 플레이 노래 오름차순으로 정렬되고, 고유번호 기준으로 내림차순 정렬됨
idx = 2 # 한 장르에 최대 2개 모음
while idx > 0 and play: # 두개 아직 안넣었거나, 넣을 노래가 있을때 반복
answer.append(play.pop()[1]) # 위에서 정렬한 노래를 가장 뒤에서부터 꺼내와서 정답에 저장
idx -= 1
return answer
🔗 문제 링크
- https://programmers.co.kr/learn/courses/30/lessons/42579
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > Python' 카테고리의 다른 글
[프로그래머스] 최고의 집합 (0) | 2022.05.12 |
---|---|
[프로그래머스] 파괴되지 않은 건물 (0) | 2022.05.09 |
[프로그래머스] 가사 검색 (0) | 2022.05.03 |
[프로그래머스] 이중우선순위큐 (0) | 2022.04.30 |
[백준] 16235 나무 재테크 (0) | 2022.04.29 |
댓글