문제
https://school.programmers.co.kr
알고리즘 - 해시
해시함수 알고리즘은 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다.
풀이
'''
각 노래의 grouping을 진행할 변수를 선언해준다.
다음과 같은 구조를 가지게 된다.
{
'장르이름': {
't': 전체 재생 시간
'l': [노래정보리스트, {'v': 재생시간, 'i': 고유번호}]
}
}
'''
d = {}
# 노래 갯수 만큼 loop를 돌며 grouping을 진행한다.
for i in range(len(genres)):
# 장르에 해당하는 key가 없으면 새로 만들어준다.
if not genres[i] in d:
d[genres[i]] = {'t': 0, 'l': []}
d[genres[i]]['l'].append({'v': plays[i], 'i': i})
d[genres[i]]['t'] += plays[i]
# 정렬을 위해 list 형태로 바꿔준다.
# 앞으로의 연산이나, answer에는 장르 이름이 필요없기에 문제없다.
d = list(d.values())
d = sorted(d, key=lambda k: k['t'], reverse=True)
answer = []
# 각 장르별 재생 횟수를 정렬하고, answer를 구한다.
for i in range(len(d)):
v = d[i]['l']
v = sorted(v, key=lambda k: k['v'], reverse=True)
for j in range(2 if len(v) >= 2 else len(v)):
answer.append(v[j]['i'])
return answer
풀이 회고
해시 맵을 곡 고유번호 기준으로 전부 맵핑하려고했으나, 효율적인 매핑 망법은 장르별로 한 번에 맵핑하는 방식이었다.
새롭게 알게된 것
-