https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
분명히 쉬워보여서 풀수있을 것같은데 못풀었다..
딕셔너리를 2개 만들어야한 다는 생각을 했으면 쉽게 풀었을 것같다.
딕셔너리를 자유자재로 쓸수있도록 연습해야겠다.
코드 :
def solution(genres, plays):
answer = []
playdic = {} # {장르 : 총 재생 횟수}
dic = {} # {장르 : [재생 횟수, 고유 번호]}
for i,(g,p) in enumerate(zip(genres,plays)) :
if g in playdic.keys() : # 이미 장르가 있다면
playdic[g] += p
dic[g].append((p,i))
else : # 장르가 새거
playdic[g] = p
dic[g] = [(p,i)] # list로 해야 append가 붙음
# dictionary에는 sort가 없음
# 많이 재생된 순으로 정렬 (1번 조건)
playdic = sorted(playdic.items(), key = lambda x : x[1], reverse = True) # 장르 정렬
# playdic은 이제 딕셔너리 아님
for key in playdic :
playlist = dic[key[0]] # playlist는 해당 장르의 노래의 재생횟수, 고유번호를 담은 list
playlist = sorted(playlist, key = lambda x : x[0], reverse = True) # 재생순으로 정렬
for i in range(len(playlist)) :
if i == 2 : # 2개만
break
answer.append(playlist[i][1]) #인덱스 번호를 붙임
return answer
3번 조건은 처음에 들어갈 때부터 고유번호가 낮은 순으로 들어가므로 지켜진다.
복습하면서 만든 코드 :
(아주 미세한 변경)
def solution(genres, plays):
answer = []
playdic = {}
dic = {}
for i,(g,p) in enumerate(zip(genres,plays)) :
if g in playdic:
playdic[g] += p
dic[g].append([p,i])
else :
playdic[g] = p
dic[g] = [[p,i]]
playdic = sorted(playdic.items(),key = lambda x :x[1], reverse = True)
for p in playdic :
playlist= dic[p[0]]
playlist.sort(key= lambda x : x[0], reverse = True)
for i in range(len(playlist)) :
if i==2 :
break
answer.append(playlist[i][1])
return answer
마지막 for문에서 playlist의 길이만큼 i를 도는데 처음에는 2까지 돌도록 만들었었다.
해당 장르에 곡이 하나밖에 없을수도 있다는 것을 깜빡했었다.
+ 딕셔너리는 sort()함수를 사용하지 못해서 sorted에 items를 넣고 리스트 형태로 만들었다.
참고 블로그 :
https://yummy0102.tistory.com/195
[해시] Level 3 베스트앨범 - 파이썬
문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속
yummy0102.tistory.com
복습 :
✅ 20220618
✅ 20220623
✅ 20220626
✅ 20220630
✅ 20220701
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스]네트워크_(DFS,유니온파인드) (0) | 2022.06.15 |
---|---|
[Python/프로그래머스]타겟넘버_DFS (0) | 2022.06.15 |
[Python/프로그래머스]위장_해시 (0) | 2022.06.14 |
[Python/프로그래머스]전화번호 목록_해시 (0) | 2022.06.14 |
[Python/프로그래머스]완주하지 못한 선수 _해시 (0) | 2022.06.14 |