-
[프로그래머스] 해시 - 베스트앨범 (python)코딩테스트 2025. 2. 9. 01:12
코딩테스트 연습 > 해시 > 베스트앨범(level3)
https://school.programmers.co.kr/learn/courses/30/lessons/42579
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
solution
1. genres 정렬
2. 1의 정렬된 genres를 이용하여 plays 정렬
#예시 #genres = ["classic", "pop", "classic", "classic", "pop"] #plays = [500, 600, 150, 800, 2500] def solution(genres, plays): answer = [] genres_cnt = {} genres_cnt_list =[] sort_genres= {} sort_genres2 = [] #genres sort for i in range(len(genres)): if genres[i] not in genres_cnt: genres_cnt[genres[i]] = plays[i] else: genres_cnt[genres[i]] += plays[i] for i in genres_cnt: genres_cnt_list.append([i,genres_cnt[i]]) #장르, 장르의 총 재생횟수 print(genres_cnt_list) #[['classic', 1450], ['pop', 3100]] genres_cnt = sorted(genres_cnt_list,reverse=True,key=lambda x:x[1]) #재생횟수로 내림차순 정렬 print(genres_cnt) #[['pop', 3100], ['classic', 1450]] for genre in genres: sort_genres[genre] = [] print(sort_genres) #{'classic': [], 'pop': []} #plays sort for i in range(len(genres)): if genres[i] in sort_genres: sort_genres[genres[i]].append([plays[i],i]) print(sort_genres) #{'classic': [[500, 0], [150, 2], [800, 3]], 'pop': [[600, 1], [2500, 4]]} for play in sort_genres: sort_genres2.append(sorted(sort_genres[play],key=lambda x:-x[0])) #value를 list에 추가하면서 재생횟수로 내림차순 정렬 print(sort_genres2) #[[[800, 3], [500, 0], [150, 2]], [[2500, 4], [600, 1]]] for play in range(len(sort_genres2)): answer.append(sort_genres2[play][0][1]) if len(sort_genres2[play]) >= 2: answer.append(sort_genres2[play][1][1]) return answer #[3, 0, 4, 1]+ sorted key 정렬관련 지식
- key로 주어진 값만 비교함. lambda x: x[0] 이면 첫번째 값으로만 정렬함. 나머지는 상관없음.
- 그러면, x[0]이 같은 것들 사이에는 어떻게 정렬이 되는가? -> stable sort. 정렬되기전에 순서를 유지함. ex) [300,4], [300,1]이 있으면 그대로 유지됨.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 스택/큐 - 기능개발 (python) (1) 2025.02.09 [프로그래머스] 입국심사 -python (0) 2025.01.08 [프로그래머스] 디스크 컨트롤러 - python (0) 2024.12.31 [프로그래머스] 더 맵게 - python (0) 2024.12.31 [프로그래머스] N으로 표현 (0) 2024.12.31