나의 답
def solution(genres, plays):
#장르별, 총 재생횟수를 담을 리스트
dic = {}
#[장르, 재생횟수] 묶은 리스트
music = []
#장르별, 재생횟수를 0으로 초기화
for i,value in enumerate(genres):
dic[value]=0
#장르별, 재생횟수의 총합을 구함
#[장르, 재생횟수]를 묶어 music에 append
for i,value in enumerate(genres):
dic[value]+=plays[i]
music.append([value, plays[i]])
#장르별 재생횟수에서, value(재생횟수)에 맞춰, 내림차순으로 정렬
dic = sorted(dic.items(), key=lambda x: x[1],reverse=True)
#정답을 담을 배열
answer = []
#장르별 재생횟수에서, 장르(key)를 이용함
for gen in dic:
#장르(key)별 plays 값을 담을 배열
ha = []
#[장르, 재생횟수]로 묶인 배열을 활용
for mu in music:
# 각 장르에 해당하는 재생횟수를 더해나감
if gen[0]==mu[0]:
ha.append(mu[1])
#모여진 각 재생횟수를 내림차순으로 정렬
ha.sort(reverse=True)
#재생횟수는 2개까진 보여지게 슬라이싱
ha = ha[:2]
# 재생횟수의 숫자에 맞게 plays에서 index를 찾아나감
for re in ha:
# 동일한 값이 있을 경우를 대비하여, filter 함수를 이용
# 동일한 값에 따른 각 index를 리스트 형태로 반환
search = list(filter(lambda x: plays[x] == re, range(len(plays))))
# 동일한 값이 2개 이상 있을 경우, 오름차순으로 정렬하여 answer에 더해나간다.
if len(search)>=2:
search.sort()
search=search[:2]
for i in search:
answer.append(i)
break
else: #1개만 있을경우에는 그냥 바로 index 찾아서 answer에 더하기
answer.append(plays.index(re))
return answer
굉장히 덕지덕지 코드라, 맞는 지는 모르겠지만 테스트를 통과하였다...ㅋㅋㅋ
아직 함수를 잘 몰라서 이용을 잘 못하겠다.
다른 사람 풀이
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
와 이렇게 간단하게 함수를 써서 풀 수 있다니..
'르탄즈 5기' 카테고리의 다른 글
[르탄즈 5기] 1/26 TIL (1) | 2024.01.26 |
---|---|
[르탄즈 5기] 1/25 TIL (1) | 2024.01.25 |
[르탄즈 5기] 1/24 TIL (1) | 2024.01.24 |
[르탄즈 5기] 1/23(화) TIL (1) | 2024.01.23 |
[르탄즈 5기] 1/22 TIL (1) | 2024.01.22 |