Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- boj 1958
- 색종이와가위
- boj 6443
- boj 15724
- 프로그래밍공부
- DirectX
- 2025 프로그래머스 코딩챌린지 1차예선
- tessellation
- 홀짝트리
- lock based queue
- boj 21921
- lock free stack
- 데이터 체커
- boj 22942
- dp
- PCCE
- pccp 기출문제 풀이
- boj 1074
- LCS
- DirectX12
- lock based stack
- 브루트포스
- boj 11053
- render target
- c++
- 지게차와 크레인
- pcce 기출문제 풀이
- 비밀 코드 해독
- boj 11657
- boj 20207
Archives
- Today
- Total
오구의코딩모험
[Python] 베스트앨범 본문
반응형
[코딩테스트 고득점KIT - 해시]
from collections import defaultdict
def solution(genres, plays):
answer = []
# 장르, 재생 횟수 딕셔너리 생성 및 초기화
play_dict = defaultdict(int)
genre_dict = defaultdict(list)
# 장르, 재생 횟수 딕셔너리 값 추가
for idx in range(len(genres)):
play_dict[genres[idx]] += plays[idx]
genre_dict[genres[idx]].append(plays[idx])
# 재생 횟수의 합 딕셔너리 내림차순 정렬 후,
# 재생 횟수가 가장 높은 장르부터 장르 딕셔너리에 대입하여 재생 횟수를 내림차순으로 저장한다.
# 만일 재생 횟수가 하나라면, 하나 2개 이상이라면 2개까지만 리스트에 넣는다.
total = [sorted(genre_dict[item[0]],reverse=True)[:2] if len(genre_dict[item[0]]) >=2 else sorted(genre_dict[item[0]],reverse=True) for item in sorted(play_dict.items(),key = lambda item:item[1],reverse=True)]
# 장르별 재생 횟수가 높은 2가지의 인덱스를 구한다.
# 재생 횟수가 같을 경우 고유번호 순서대로 return
for gen in total:
for idx in gen:
if plays.index(idx) in answer:
answer.append(plays.index(idx,plays.index(idx)+1,len(plays)))
else:
answer.append(plays.index(idx))
return answer
재생 횟수의 합 딕셔너리를 내림차순으로 정렬을 해주지 않아,
테스트 케이스는 통과하지만 제출 케이스에선 대부분 실패로 떴다.
딕셔너리에 있는 리스트 값을 정렬해줄 땐,
key를 사용하여 역순 정렬을 해주도록 하자!
반응형
'프로그래밍 공부 > 프로그래머스' 카테고리의 다른 글
[Python] 같은 숫자는 싫어 (0) | 2022.12.24 |
---|---|
[Python] 위장 (0) | 2022.12.23 |
[Python] 전화번호 목록 (0) | 2022.12.23 |
[Python] 폰켓몬 (0) | 2022.12.14 |
[Python] 완주하지 못한 선수 (0) | 2022.12.14 |
Comments