728x90
728x90
아래의 문제는 프로그래머스 코딩테스트 고득점 Kit 내용이며 코드는 직접 푼 내용입니다.
베스트앨범
문제상황
요구사항
노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요.
제한사항
- genres[i]는 고유번호가 i인 노래의 장르입니다.
- plays[i]는 고유번호가 i인 노래가 재생된 횟수입니다.
- genres와 plays의 길이는 같으며, 이는 1 이상 10,000 이하입니다.
- 장르 종류는 100개 미만입니다.
- 장르에 속한 곡이 하나라면, 하나의 곡만 선택합니다.
- 모든 장르는 재생된 횟수가 다릅니다.
입출력
풀이과정
dict를 두개만들었다.
하나는 장르에 따라서 (고유번호, 재생횟수)를 가지고 있는 dict (index)
하나는 장르를 key로 재생횟수를 합한 dict (score)
그리고 정렬을 두번하면 된다.
처음엔 재생횟수를 기준으로, 다음엔 재생횟수가 많은 장르의 (고유번호,재생횟수)의 재생횟수를 기준으로
결과
def solution(genres, plays):
answer = []
index = {}
score = {}
for i, (genre, play) in enumerate(zip(genres, plays)):
if genre not in index:
index[genre] = [(i, play)]
else:
index[genre].append((i, play))
if genre not in score:
score[genre] = play
else:
score[genre] += play
#print(index) #{'classic': [(0, 500), (2, 150), (3, 800)], 'pop': [(1, 600), (4, 2500)]}
#print(score) #{'classic': 1450, 'pop': 3100}
for (k, v) in sorted(score.items(), key=lambda x:x[1], reverse=True):
for (i, play) in sorted(index[k], key=lambda x:x[1], reverse=True)[:2]:
answer.append(i)
return answer
genres=["classic", "pop", "classic", "classic", "pop"]
plays=[500, 600, 150, 800, 2500]
print(solution(genres, plays))
배운점
- enumerate와 zip 사용하기 2021.05.26 - [Python] 파이썬 enumerate 활용법 | for문을 파이썬스럽게
- dict 정렬하기 2021.05.25 - [Python] 람다식, lambda로 sorted key 정하기
728x90
반응형
'코딩 테스트' 카테고리의 다른 글
[SQL고급] rank함수 - 랭킹(순위) 구하기 (MySQL 8버전) (2) | 2021.08.14 |
---|---|
[카카오][Python] 순위검색 - combination 그리고 이진탐색 (0) | 2021.08.13 |
[Python] 코딩테스트 고득점Kit | 해시4-베스트앨범 cmp_to_key 정렬 (0) | 2021.08.04 |
[LeetCode] 438. Find All Anagrams in a String -슬라이딩 윈도우 (0) | 2021.07.29 |
[백준][파이썬]21921.블로그 -슬라이딩윈도우 (0) | 2021.07.29 |
[백준][파이썬]11659.구간합구하기4 - 구간합(접두사합) (0) | 2021.07.28 |