✏️ 내가 작성한 코드
def solution(genres, plays):
play_dic = {} # 인덱스, 재생수 딕셔너리
total_play_dic = {} # 총 재생수 딕셔너리
album_list = [] # 고유번호가 들어있는 최종 베스트 앨범
for i,genre in enumerate(genres):
try:
total_play_dic[genre] += plays[i]
play_dic[genre] += [(i, plays[i])]
except:
total_play_dic[genre] = plays[i]
play_dic[genre] = [(i,plays[i])]
for i in sorted(total_play_dic.items(),key=lambda x:x[1],reverse=True):
sort_play_dic = sorted(play_dic[i[0]], key=lambda x:(-x[1],x[0])) # 내림차순은 -x, 오름차순은 x
i_cnt = 0
for play in sort_play_dic:
if i_cnt == 2: # 장르별로 노래 2개씩만 앨범에 담음. 따라서 2개 되면 break
break
album_list.append(play[0])
i_cnt += 1
return album_list
✏️ 참고
1 ) 첫번째 for문에서 try, except하는 이유 :
처음에는 딕셔너리 내에 key가 존재하지않기 때문에 total_play_dic[genre], play_dic[genre]에 += 구문을 사용하여 value에 값을 더하려고 하면 에러가 발생한다.
그래서 예외처리로 키와 값을 지정하여 아래처럼 각 딕셔너리에 첫 값을 지정해준다.
total_play_dic[genre] = plays[i]
play_dic[genre] = [(i,plays[i])]
2 ) 딕셔너리.items()를 사용하면 value값으로 정렬이 가능하다. (sorted() 사용)
* sort() : 딕셔너리, 튜플, 문자열에는 사용 불가,
sorted() :딕셔너리, 튜플, 문자열에도 사용 가능
3 ) sorted에서 key를 여러개 하여 정렬할때, lamda에서 x 통해 여러개 지정 가능.
ex ) key=lambda x:(-x[1],x[0])
reverse대신 '-' 사용하여 내림차순 사용 > x 앞에 - 붙으면 '내림차순', 안붙으면 '오름차순'
'프로그래머스' 카테고리의 다른 글
[프로그래머스][python][해시] 의상 (1) | 2024.10.01 |
---|---|
[프로그래머스][python][너비 우선 탐색/BFS] 단어 변환 문제 (0) | 2023.10.27 |
[프로그래머스][python] 영어 끝말잇기 문제 (0) | 2023.09.15 |
[프로그래머스][python][BFS] 게임 맵 최단거리 문제 (0) | 2023.06.07 |
[프로그래머스][python][깊이/너비 우선 탐색(DFS/BFS)] 네트워크 문제 (0) | 2023.06.06 |