티스토리 뷰
문제출처 - https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범 | 프로그래머스
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 play
programmers.co.kr
풀이
def solution(genres, plays):
answer = []
playDic = {} # {장르 : 총 재생 횟수}
dic = {} # {장르 : [(플레이 횟수, 고유번호)]}
# 해시 만들기
for i in range(len(genres)):
playDic[genres[i]] = playDic.get(genres[i], 0) + plays[i]
dic[genres[i]] = dic.get(genres[i], []) + [(plays[i], i)]
# 재생 횟수 내림차순으로 장르별 정렬
genreSort = sorted(playDic.items(), key = lambda x: x[1], reverse = True)
# 재생 횟수 내림차순, 인덱스 오름차순 정렬
# 장르별로 최대 2개 선택
for (genre, totalPlay) in genreSort:
dic[genre] = sorted(dic[genre], key = lambda x: (-x[0], x[1]))
answer += [idx for (play, idx) in dic[genre][:2]]
return answer
분석
- 해시 만들기
- playDic : { 장르 : 총 재생 횟수 } 형태로 해시를 만듦
- dic : { 장르 : [(플레이 횟수, 고유번호)]} 형태로 해시를 만듦
- playDic을 재생 횟수 내림차순으로 장르별 정렬
- playDic을 items()라는 함수를 사용해 튜플로 만듦. x[1]이니까 '총 재생 횟수'를 기준으로 내림차순(reverse = True) 정렬
- 이번엔 dic을 재생횟수 내림차순 & 인덱스 오름차순 정렬
- -x[0]의 마이너스는 내림차순의 의미
- answer에 장르별로 최대 2개의 고유번호 추가
+α
딕셔너리의 get(x) 함수는 x라는 key에 대응되는 value값을 돌려준다.
만약 get(x, 'Baaaaaaam') 함수에 두번째 인자를 넣어주면 x라는 key가 딕셔너리에 없는 경우, 'Baaaaaaam'을 디폴트 값을 돌려준다.
'Baaaaaaam'이라는 key값이 딕셔너리에 없는데 dic['Baaaaaaam']을 사용하면 key 오류를 발생시키는데 get함수를 사용하면 key값이 없어도 오류를 발생시키지 않고 None을 반환해준다.
즉, 딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 된다!!
'ALGORITHM > 프로그래머스' 카테고리의 다른 글
[Python][정렬] 프로그래머스 - 가장 큰 수(Level2) (2) | 2020.02.21 |
---|---|
[C++]프로그래머스 - [1차]다트게임(level1) (0) | 2020.02.19 |
[Python]프로그래머스 - 위장(level2) (0) | 2020.02.16 |
[Python] 프로그래머스 - 전화번호 목록(Level2) (1) | 2020.02.16 |
[Python]프로그래머스 - 완주하지 못한 선수(level1) (0) | 2020.02.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SW Expert
- 파이썬
- 스택
- programmers
- dictionary
- 재귀
- 우선순위큐
- 문자열
- 해시
- 2019 Kakao Blind Recruitment
- Permutation
- hash
- 순열
- SWExpert
- 힙
- 문자열처리
- 2020 KAKAO BLIND RECRUITMENT
- C++
- 프로그래머스
- left join
- 괄호
- 완전탐색
- BOJ
- 딕셔너리
- 코딩테스트
- combination
- 구현
- 정렬
- 백준
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함