알고리즘/프로그래머스 [프로그래머스] 베스트앨범 최성훈 2019. 11. 10. 18:32 반응형 문제 보기 풀이풀이 이 문제는 해쉬 문제이다. 문제를 해결하기 위해 2가지의 dictionary 자료형 변수가 필요하다. 첫 번째는 각 장르별 재생 횟수를 위해, 두 번째는 각 노래별 재생 횟수를 위해서이다. 문제를 푼 로직은 다음과 같다. 각 장르별 총 재생 횟수를 구한다. (10~13번째 줄) 모든 노래에 대해 장르별로 해쉬 맵을 구성한다. (14~17번째 줄) 총 재생 횟수가 많은 순서대로 장르의 순서를 구한다. (19~20번째 줄) 재생 횟수가 많은 순서대로 각 장르에 속한 노래들의 순서를 구한다. (21~23번째 줄) 3번에서 구한 장르의 순서대로, 그 장르에 속한 노래들을 4번에서 구한 순서에서 첫 번째와 두 번째 노래를 베스트 앨범에 추가한다. (노래가 1곡이면 1곡만 추가한다.) (25~32번째 줄) 풀이 코드코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 from operator import itemgetter def solution(genres, plays): answer = [] total_plays = dict() songs = dict() for i, genre in enumerate(genres): # count total plays for each genre if genre not in total_plays: total_plays[genre] = 0 total_plays[genre] += plays[i] # add current song to hash map if genre not in songs: songs[genre] = list() songs[genre].append((i, plays[i])) # sort genres by total plays sorted_total_plays = sorted(total_plays.items(), key=itemgetter(1), reverse=True) # sort songs in a genre by its plays for genre in songs: songs[genre].sort(key=itemgetter(1), reverse=True) # make best album for genre, total_plays in sorted_total_plays: if len(songs[genre]) > 1: candidates = list(zip(songs[genre][0], songs[genre][1]))[0] answer.extend(candidates) else: candidate = songs[genre][0][0] answer.append(candidate) return answer Colored by Color Scripter cs 코드 반응형 저작자표시 (새창열림)