정말 정말 풀기 싫은 레벨3 를 풀었습니다
레벨 2를 다 풀고 하면 되지 않나, 문제도 길고 조건이 많잖아ㅠ
<< 어차피 코테 쉬운 문제도 섞여 나오면 그거라도 제대로 풀자 (난 잘 못 풀지만)
이 마인드로 하다가 고득점 kit 에 더이상 풀 레벨2 가 없어서 눈물을 머금고 도전,,,
이것저것 해보다가 한시간 좀 넘게 걸렸는데 << 뭐 어쩔건데 풀었잖아~
할만한데 뭔가 다른 사람 풀이 보니까 다들 잘혀~,,,,,
좀 fansy 하게 풀지를 못했고,, 코드 좀 길긴해..
그래도 중간중간 chatgpt 키고 싶은 마음 꾹 참으면서 일요일 아침을 잘 보냈네요..
https://school.programmers.co.kr/learn/courses/30/lessons/42579
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
배운 것
그냥 compare(a, b) 만들어서 쓰는 줄 알았는데 cmp_to_key 로 함수명을 넘겨주면 되는 거였고~
-1, 0, 1 숫자 작게 반환할수록 앞쪽에 위치하게 됨.
from collections import Counter
from functools import cmp_to_key
def solution(genres, plays):
answer = []
idx_gen_play = []
genre_dict = {}
# 가장 많이 재생된 장르 확인
for idx, (genre, play) in enumerate(zip(genres, plays)):
idx_gen_play.append((idx, genre, play))
if genre not in genre_dict:
genre_dict[genre] = play
else:
genre_dict[genre] += play
genre_dict = sorted(genre_dict, key=lambda x: genre_dict[x], reverse=True)
# idx_gen_play 를 위에서 구한 genre_dict 순서대로 sort 시키기
def sort_genre(a, b):
a_idx = genre_dict.index(a[1])
b_idx = genre_dict.index(b[1])
if a_idx < b_idx:
return -1
elif a_idx > b_idx:
return 1
else:
return 0
# 장르 내에서 많이 재생된 노래 확인
def max_play(a, b):
if a[2] > b[2]:
return -1
elif a[2] < b[2]:
return 1
else:
# 장르 내에서 재생 횟수가 같은 노래에서 고유번호가 낮은 노래 먼저 넣기
if a[0] < b[0]:
return -1
elif a[0] > b[0]:
return 1
else:
return 0
idx_gen_play = sorted(idx_gen_play, key=cmp_to_key(max_play))
idx_gen_play = sorted(idx_gen_play, key=cmp_to_key(sort_genre))
# 장르별로 2개씩 가져오기
cur_idx = 0
for cur_genre in genre_dict:
# pop
genre_cnt = 0
# print(cur_genre, genre_cnt)
for (idx, genre, play) in idx_gen_play[cur_idx:]:
# print(cur_genre, idx, genre, play)
if cur_genre == genre:
if genre_cnt < 2:
answer.append(idx)
genre_cnt += 1
cur_idx += 1
if genre_cnt >= 2:
break
return answer
728x90
반응형