나의 풀이
def solution(genres, plays):
answer = []
dic = {}
dic2 = {}
# dic 에 key : 장르,
# value : 장르 총 재생횟수 를 저장한다.
# dic2 에 key : 장르,
# value : (수록곡 재생횟수, 고유번호) 을 저장한다.
for i, (j,k) in enumerate(zip(genres, plays)):
if j not in dic :
dic[j] = plays[i]
else :
dic[j] += plays[i]
if j not in dic2 :
dic2[j] = [(plays[i], i)]
else :
dic2[j].append((plays[i],i))
# dic 의 (key, value) 에 대해 value 값으로 내림차순 정렬한다.
for i, _ in sorted(dic.items(), key=lambda x:x[1], reverse=True) :
# dic2 의 key 값이 i인 values 에 대해서, (수록곡 재생횟수의 내림차순, 고유번호의 오름차순) 순서대로 정렬한다.
#이때 values list 중 0,1번째 인덱스에 대해서만 다룬다.
for j, k in sorted(dic2[i], key=lambda x: (-x[0], x[1]))[:2] :
answer.append(k)
return answer
알고리즘 자체는 생각해낼 수 있었지만,
파이썬 문법이 아직 익숙하지 않아 조금 애를 먹었다...
enumerate : 인덱스를 자동으로 생성해준다.
zip : 크기가 같은 iterable한 데이터들을 쌍으로 엮어 tuple 을 생성해준다.
딕셔너리.items() -> 반복문에서 딕셔너리의 (key, values) 을 한번에 탐색하고 싶을 때 사용한다.
'알고리즘 > 해시' 카테고리의 다른 글
[프로그래머스] 폰켓몬 - 파이썬(python) (0) | 2022.09.01 |
---|---|
[프로그래머스] 위장 - 파이썬(python) (0) | 2022.05.05 |
[프로그래머스] 전화번호 목록 - 파이썬(python) (0) | 2022.05.05 |
[프로그래머스] 완주하지 못한 선수 - 파이썬(python) (0) | 2022.05.05 |
댓글