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 | 31 |
Tags
- Java
- select
- Dynamic Programming
- Python
- javascript
- 파이썬
- 동적계획법
- 자바스크립트
- level 3
- LEVEL 2
- 깊이 우선 탐색
- 티스토리챌린지
- 오블완
- 너비 우선 탐색
- Lv. 1
- dfs
- DP
- softeer
- programmers
- group by
- SQL
- join
- Lv. 0
- bfs
- 프로그래머스
- C언어
- Lv. 2
- SQL 고득점 KIT
- Lv. 3
- 소프티어
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 Lv. 3 베스트앨범 Python [반례 포함] 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42579
정답 코드
def solution(genres, plays):
answer = []
genreDict = dict()
lenGenres = len(genres)
for i in range(lenGenres):
genre = genres[i]
play = plays[i]
if genreDict.get(genre):
genreDict[genre].append((play, i))
genreDict[genre][0] += play
else:
genreDict[genre] = [play, (play, i)]
genreList = sorted(list(genreDict.values()), key=lambda x: x[0], reverse=True)
for g in genreList:
lenG = len(g)
ng = sorted(g[1:], key=lambda x: (x[0], -x[1]), reverse=True)
for i in range(min(2, lenG-1)):
answer.append(ng[i][1])
return answer
풀이 방법
- dictionary에 장르별로 넣는데 맨 앞에 total 노래 재생수를 더해주면서 저장한다.
- 람다식과 sort를 사용해서 가장 많이 재생된 장르 순으로 정렬한다.
- 정렬한 리스트를 바탕으로 각각의 장르별 가장 많이 재생된 순서는 내림차순 그리고 index는 오름차순으로 정렬한다.
- 둘 중 하나를 마이너스로 처리하면 오름차순 내림차순 정렬하는데 용이하다.
- 장르별 노래 리스트의 최대 2개까지 answer에 append하기 위해서 min(2, lenG-1)를 범위로 설정한다.
느낀점
- 문해력이 조금 낮아서 요즘 책을 읽고 있다.
- 그렇게 어려운 문제가 아니지만 잘 못된 점을 찾지 못하면 늪에 빠진다.
- 늪에 빠졌을 때는 다 지우고 다시 읽자.
'알고리즘' 카테고리의 다른 글
백준 GOLD 5 [2470번] 두 용액 Python (1) | 2024.01.01 |
---|---|
프로그래머스 Lv. 3 보석 쇼핑 Python (0) | 2023.12.31 |
프로그래머스 Lv. 3 단어 변환 Python (0) | 2023.12.29 |
프로그래머스 Lv. 3 네트워크 Python (1) | 2023.12.29 |
프로그래머스 Lv3 이중우선순위큐 Python (0) | 2023.12.27 |