def solution(genres, plays):
# 장르별로 가장 많이 재생된 노래 2개
# 1. 속한 노래가 많이 재생된 장르
# 2. 장르 내에서 많이 재생된 노래
# 3. 재생 횟수가 같은 경우 고유 번호가 낮은 노래
# { 장르 : 총 재생 횟수 }
# { 장르 : [(고유번호, 재생횟수), (고유번호, 재생횟수)]}
playDic = {}
musicDic = {}
for i in range(len(genres)):
playDic[genres[i]] = playDic.get(genres[i], 0) + plays[i]
musicDic[genres[i]] = musicDic.get(genres[i], [])+ [(i, plays[i])]
sortPlayDic = sorted(playDic.items(), key=lambda x:x[1], reverse=True)
answer = []
for i, j in sortPlayDic:
musicDic[i] = sorted(musicDic[i], key=lambda x:(-x[1],x[0]))
answer += [x for x, y in musicDic[i][0:2]]
return answer
배열의 덧셈
[1, 2] + [3, 4] = [1, 2, 3, 4]
[(1, 2)] + [(3, 4)] = [(1, 2), (3, 4)]
append
와 다른 점은 append
는 [ ] 즉, 배열 자체를 추가한다.
Dictionary의 get
Dictionary는 Key값을 가지고 Value를 얻는 두 가지 방법이 있다.
dic = {'a': 1, 'b': 2 }
dic['a'] = 1
dic.get('a') = 1
dic.get('c', 0 ) = 0
// get은 두 번째 인자로 값이 없을 경우를 대비할 수 있다.
또한, Dictionary는 Key값이 중복될 수 없어 원래 요소를 덮어쓴다.
누적으로 더하는 풀이에서 사용될 수 있다.
lambda 함수
lambda x:-x[0] // 내림차순
lambda x:x[0] // 오름차순
def solution(genres, plays):
# total_dic { 장르: 총 재생 횟수 }
# play_dic { 장르: [(고유번호, 재생횟수)] }
total_dic = {}
play_dic = {}
for i in range(len(genres)):
total_dic[genres[i]] = total_dic.get(genres[i], 0) + plays[i]
play_dic[genres[i]] = play_dic.get(genres[i], []) + [(i, plays[i])]
total_sort = sorted(total_dic.items(), key=lambda x: -x[1])
result = []
for i, j in total_sort:
play_dic[i] = sorted(play_dic[i], key=lambda x: (-x[1], x[0]))
for k in play_dic[i][0:2]:
result.append(k[0])
return result