문제
베스트 앨범 (https://programmers.co.kr/learn/courses/30/lessons/42579?language=python3#)
풀이
1. 초기 접근
- 문제 조건 해석
- 속한 노래가 많이 재생된 장르를 먼저 수록합니다 -> 장르별로 먼저 묶어서 정렬해야 한다.
- 장르 내에서 많이 재생된 노래를 먼저 수록합니다. -> 장르 내에서도 정렬해야 한다.
- 코드 (python)
from operator import itemgetter
def solution(genres, plays):
answer = []
d = {}
# make set according to genre.
for i in range(0, len(genres)) :
if genres[i] not in d :
d[genres[i]] = []
d[genres[i]].append(0);
d[genres[i]].append( (i, plays[i]) );
d[genres[i]][0] += plays[i];
# now d is
# d = { 'classic': [1450,(0, 500), (2, 150), (3, 800)],
# 'pop': [3100, (1, 600), (4, 2500)] }
# sort set on descending order.
a = list(d.values())
a.sort(key=itemgetter(0), reverse=True)
# now a is
# a = [ [3100, (1, 600), (4, 2500)],
# [1450, (0, 500), (2, 150), (3, 800)] ]
# pop the most played genre.
# and selecte the most played two songs.
while a :
max = -1
# remove total sum of the genre played.
a[0].pop(0)
# sort by number played on increasing order.
a[0].sort(key=itemgetter(1), reverse=True)
# extract top 2 songs and append to answer.
for i in range(0, len(a[0])) :
if (i >= 2) :
break
answer.append(a[0][i][0])
# remove current genre from list.
a.pop(0)
return answer
- c++ 보다, python이 더 쉽게 코딩할 수 있을 듯 하여, python으로 구현했다.
- 자세한 설명은 코드 주석으로 달아놓았다.
sort.(key=itemgetter(1))
부분이 생소할 수 있는데, 나도 처음 써본다. sort 하고자 하는 list의 item의 1번째 인덱스 기준으로 sort 하는 방식이라고 한다. 자세한 설명은 점프 투 파이썬을 참조.
'취업과 기본기 튼튼 > 코딩 테스트 노트' 카테고리의 다른 글
[프로그래머스] 거스름돈 (0) | 2019.03.21 |
---|---|
[프로그래머스] 보행자천국 (0) | 2018.11.17 |
[프로그래머스] 등굣길 (0) | 2018.11.17 |
[프로그래머스] 이중우선순위큐 (0) | 2018.11.14 |
[프로그래머스] 여행경로 (4) | 2018.11.14 |