Coding Test/프로그래머스(Python)
[프로그래머스/Python] Level 3_베스트앨범(해시)
syunze
2024. 2. 5. 17:49
📌문제 유형
해시
📌문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📌나의 문제풀이
- genres_total = {장르 : 장르 전체 합}
- list_ = {장르 : [재생횟수, 고유번호]}
- 각각의 dict 저장 -> for문으로 장르별 상위 2개 선정 -> genres_total 별 내림차순
def solution(genres, plays):
answer = []
result = []
genres_total = {}
list_ = {}
for i in range(len(genres)):
if genres[i] not in genres_total:
genres_total[genres[i]] = plays[i]
list_[genres[i]] = []
list_[genres[i]].append([plays[i], i])
else:
genres_total[genres[i]] += plays[i]
list_[genres[i]].append([plays[i], i])
genres_total = sorted(genres_total.items() , key = lambda x : x[1], reverse = True)
genres_total = dict(genres_total)
list_ = sorted(list_.items(), key = lambda y : y[1], reverse = True)
# 장르 100개 정도는 for문 가능
for key, value in list_:
value.sort(key = lambda x : (-x[0],x[1]))
answer.append([genres_total[key],value[0][1]])
if len(value) > 1:
answer.append([genres_total[key],value[1][1]])
answer.sort(key = lambda a : -a[0])
for total, idx in answer:
result.append(idx)
return result
📌다른사람의 문제풀이
def solution(genres, plays):
answer = []
d = {e:[] for e in set(genres)}
for e in zip(genres, plays, range(len(plays))):
d[e[0]].append([e[1] , e[2]])
genreSort =sorted(list(d.keys()), key= lambda x: sum( map(lambda y: y[0],d[x])), reverse = True)
for g in genreSort:
temp = [e[1] for e in sorted(d[g],key= lambda x: (x[0], -x[1]), reverse = True)]
answer += temp[:min(len(temp),2)]
return answer
📌리뷰
- 해시 문제는 대부분 정렬을 많이 이용
- set을 활용한 dict 초기화는 알아두기
728x90