728x90
programmers.co.kr/learn/courses/30/lessons/42579
정답코드
def solution(genres, plays):
answer = []
music_dict = {}
category = []
# set category dict
for i in range(len(genres)):
if genres[i] in music_dict.keys():
music_dict[genres[i]].append((plays[i],i))
else:
music_dict[genres[i]] = []
music_dict[genres[i]].append((plays[i],i))
# classify category
for i in music_dict.keys():
category.append((i, sum(map( lambda x: x[0], music_dict[i])) ))
category.sort(key = lambda x : x[1], reverse = True)
for i in category:
lists = music_dict[i[0]]
lists.sort(key = lambda x : x[0], reverse = True)
for i in range(2):
try:
answer.append(lists[i][1])
except:
pass
return answer
간단설명
dictonary를 이용해서 먼저 음악의 카테고리를 나눴습니다. 첫번째 반복문이 끝나면 music_dict변수에
{
'classic': [(500, 0), (150, 2), (800, 3)],
'pop': [(600, 1), (2500, 4)]
}
이와 같이 데이터가 담기게 됩니다.
이제 이 데이터의 값을 더해서 우선순위를 고르고 우선순위를 순회 하면서 list의 높은 값부터 가지고 오게 됩니다.
pop : [(2500, 4), (600, 1)]
classic : [(800, 3), (500, 0), (150, 2)]
출력된 결과 리스트에서 앞 두개씩만 가져옵니다.
728x90
'IT 이야기 > 알고리즘 공부' 카테고리의 다른 글
[Programmers][Python][동적계획법, DP] 정수 삼각형- level3 (0) | 2021.03.01 |
---|---|
[Programmers][Python][2019 카카오 개발자 겨울 인턴십] 불량사용자 - level3 (0) | 2021.02.05 |
[Programmers][Python][연습문제] 야근지수 - level3 (0) | 2021.02.03 |
Backjoon 1094번 막대기 (0) | 2020.12.01 |
Backjoon 1010번 다리놓기 (0) | 2020.11.30 |
댓글