[Python] 프로그래머스 - 베스트앨범
728x90
반응형
programmers.co.kr/learn/courses/30/lessons/42579
Python의 dictionary는 '해쉬테이블'형식으로 구현되어 있어서 속도가 빠르다. 코테나 알고리즘을 공부하면서 '해시'가 나온다면 파이썬은 대부분 dictionary로 풀면 될 것이다.
def solution(genres, plays):
answer = []
dic = {}
for i in range(len(genres)):
if genres[i] in dic:
# 현재 장르가 이미 dic에 있다면 그 장르에 해당하는 value의 0번째 index에 현재 index를 append해주고
# 1번째 index에 재생횟수를 추가해준다.
dic[genres[i]][0].append(i)
dic[genres[i]][1] += plays[i]
else:
# 현재 장르가 dic에 없다면 dic에 현재 index와 재생횟수를 추가해준다.
dic[genres[i]] = [[i], plays[i]]
# dic.items()를 재생횟수순으로 내림차순 정렬(-x[1][1])해서 diclist에 할당한다.
diclist = sorted(dic.items(), key = lambda x: -x[1][1])
for i in diclist:
# 현재 장르에 속한 곡이 하나라면 하나만 answer에 추가시켜준다.
if len(dic[i[0]][0]) == 1:
answer.append(dic[i[0]][0][0])
else:
# 현재 장르에 속한 곡이 2개 이상이라면, 재생횟수순으로 내림차순 정렬한 뒤 상위 2개의 곡만 answer에 extend해준다.
dic[i[0]][0].sort(key = lambda x: -plays[x])
answer.extend(dic[i[0]][0][:2])
return answer
(처음 level 3문제를 맞췄는데, level 2수준인 것 같다.. 프로그래머스 난이도 설정도 주관적이므로 어쩔수 없나보다.)
728x90
반응형
'문제풀이 > Programmers' 카테고리의 다른 글
[Python] 프로그래머스 - 기능개발 (0) | 2021.05.05 |
---|---|
[Python] 프로그래머스 - 등굣길 (0) | 2021.05.02 |
[Python] 프로그래머스 - 행렬 테두리 회전하기 (0) | 2021.04.28 |
[Python] 프로그래머스 - 로또의 최고 순위와 최저 순위 (0) | 2021.04.27 |
[Python] 프로그래머스 - 삼각 달팽이 (2) | 2021.04.25 |
TAGS.