리스트를 사용해서 풀었다.
풀면서 딕셔너리를 활용했으면 더 쉬웠겠다는 생각을 했다. 주로 리스트로 문제에 접근하다보니 딕셔너리를 써야 할 때도 잘 못쓰는 것 같다.
def solution(genres, plays):
genre_set = list(set(genres))
playing_nums = [0 for _ in range(len(genre_set))]
keys = [[] for _ in range(len(genre_set))]
temp = []
answer = []
for idx in range(len(genres)):
playing_idx = genre_set.index(genres[idx])
playing_nums[playing_idx] += plays[idx]
keys[playing_idx].append((plays[idx], idx))
for key in keys:
key.sort(reverse=True, key = lambda x : (x[0], -x[1]))
while playing_nums:
max_idx = playing_nums.index(max(playing_nums))
temp.append(keys[max_idx][:2])
playing_nums.pop(max_idx)
keys.pop(max_idx)
for i in range(len(temp)):
for val in temp[i]:
answer.append(val[1])
return answer
딕셔너리를 사용해서 푼 풀이다.
깔끔하다.
enumerate와 zip 함수는 알아두면 유용하게 사용할 것 같다.
sort(reverse, key)를 이용하면 정렬을 아주 쉽게 할 수 있다. key는 lamda를 사용하면 여러 조건을 지정할 수 있다는 것을 기억하자
def solution(genres, plays):
answer = []
dic1 = {}
dic2 = {}
for i, (g, p) in enumerate(zip(genres, plays)):
if g not in dic1:
dic1[g] = [(i, p)]
else:
dic1[g].append((i, p))
if g not in dic2:
dic2[g] = p
else:
dic2[g] += p
for (k, v) in sorted(dic2.items(), key=lambda x:x[1], reverse=True):
for (i, p) in sorted(dic1[k], key=lambda x:x[1], reverse=True)[:2]:
answer.append(i)
return answer
저기요 저 2기 sw정글 지원하는데요 조언좀 구하고싶어요! 혹시 보시면 답글좀 달아주시겠어요?