반응형
Level 3 해시
문제 : https://programmers.co.kr/learn/courses/30/lessons/42579
제출 코드
def solution(genres, plays):
answer = []
dic = {}
#장르별로 플레이와 인덱스 추가
for i in range(len(genres)):
# 딕셔너리도 append 가능
if genres[i] in dic:
dic[genres[i]].append([plays[i], i])
else:
dic[genres[i]] = [[plays[i], i]]
#장르의 총합
genTotal = {genre: 0 for genre in genres}
for i in range(len(genres)):
genTotal[genres[i]] += plays[i]
# 장르의 우선순위 정하기
sgenTotal = sorted(genTotal.items(), key=lambda x: -x[1])
#장르 안의 곡의 우선순위 정하기
for k in dic.keys():
dic[k].sort(key = lambda x : -x[0])
#장르별 앞에서 2개 또는 1개 뽑기
for gen, total in sgenTotal:
if len(dic[gen]) == 1:
answer.append(dic[gen][0][1])
else:
answer.append(dic[gen][0][1])
answer.append(dic[gen][1][1])
return answer
정리 및 복습
저는 딕셔너리에서 장르를 키값으로 하면 마지막에 나온 장르 값이 앞의 값을 계속 초기화 하는 문제가 발생했습니다. 이를 배제하고 문제를 풀 수 있는 방법이 도저히 생각나질 않아서 검색을 해서 힌트를 얻었습니다.
딕셔너리에서도 값을 리스트로 설정하면 append가 가능하는 것을 배우고 바로 적용시켰습니다.
중복하여 장르가 한번에 해결되니 문제가 바로 풀렸습니다.
장르의 합을 구하는 경우 딕셔너리로 값을 모두 0으로 초기화한 뒤, 인덱스로 한번에 해결하였습니다.
프로그래머스가 한 알고리즘을 집중적으로 기르는 데는 백준보다 좋은 것 같습니다.
반응형
'ProblemSolving > Hash' 카테고리의 다른 글
프로그래머스 위장 (파이썬) (0) | 2022.05.03 |
---|---|
프로그래머스 전화번호 목록 (파이썬) (0) | 2022.05.03 |
프로그래머스 완주하지 못한 선수 (파이썬) (0) | 2022.05.03 |
프로그래머스 신고 결과 받기 (파이썬) (0) | 2022.05.03 |