https://school.programmers.co.kr/learn/courses/30/lessons/42579
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아이디어
각 노래에 대해 (노래가 해당하는 장르의 총 재생 횟수, 노래의 재생 횟수, -(고유 번호))을 구해준 뒤, 각각에 대해서 순서대로 내림차순 정렬해주었다.
songs.sort(key = lambda x: (x[0], x[1], x[2]), reverse=True)
고유 번호를 음수로 바꾼 이유는, reverse = True로 정렬하기 때문이다.
각 장르에 대해 2개씩만 출력해줘야 하기 때문에 genre_count 딕셔너리를 만들어서 2개 이하일 때만 정답에 추가되도록 하였다.
genre_count = defaultdict(int)
answer = []
for genre, song, k in songs:
if genre_count[genre] < 2:
answer.append(-k)
genre_count[genre] += 1
전체 코드
# 7:46 ~ 8:36 (50")
from collections import defaultdict
def solution(genres, plays):
songs = []
genre_info = defaultdict(int) #장르, 재생 횟수
for k, v in zip(genres, plays): genre_info[k] += v
for i, (genre, play) in enumerate(zip(genres, plays)):
songs.append((genre_info[genre], play, -i))
songs.sort(key = lambda x: (x[0], x[1], x[2]), reverse=True)
genre_count = defaultdict(int)
answer = []
for genre, song, k in songs:
if genre_count[genre] < 2:
answer.append(-k)
genre_count[genre] += 1
return answer
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스] 기능개발 (level2, python) (1) | 2024.01.11 |
---|---|
[프로그래머스] 같은 숫자는 싫어 (level1, pyhton) (0) | 2024.01.11 |
[프로그래머스] 의상 (level2, python) (1) | 2024.01.10 |
[프로그래머스] 전화번호 목록(level2, python) (0) | 2024.01.10 |
[프로그래머스] 폰켓몬(level1, python) (0) | 2024.01.10 |