반응형
문제: https://programmers.co.kr/learn/courses/30/lessons/42579
자잘하게 신경써줘야할 게 많아서 난이도가 레벨3으로 측정된 것 같습니다.
천천히 한 단계씩 해결해나가면 오래걸리긴 해도 안 풀리는 문제는 아닙니다.
아래는 제 풀이입니다.
다른 분들의 풀이를 보니 알고 있으면 좋을 만한 테크닉들이 보여서 정리해봤습니다.
- 리스트에서 중복 제거
- map과 sum 활용하기
myList = [(1,10),(2,20),(3,30),(4,40)]
위와 같은 리스트에서 10, 20, 30, 40 의 합계를 구하려면 어떻게 해야 할까요?
for문을 이용하는 것도 나쁘지 않지만, 다음과 같이 처리할 수도 있습니다.
- 다중정렬? 하기
튜플을 정렬하면 위와 같이 첫 번째 원소를 기준으로 정렬하고,
첫 번째 원소가 같은 경우 두 번째 원소를 기준으로 정렬합니다.
만약 첫 번째 원소는 오름차순, 두 번째 원소는 내림차순으로 정렬하고 싶다면 아래처럼 하면 됩니다.
이런 테크닉들을 적용하면 코드 길이가 아래처럼 짧아집니다.
def solution(genres, plays):
album, answer = {}, []
for i, genre, play in zip(range(len(genres)), genres, plays):
album[genre] = album.get(genre, []) + [(i, play)]
for genre in sorted(list(album.keys()), key=lambda x: sum([_[1] for _ in album[x]]), reverse=True):
answer += [_[0] for _ in sorted(album[genre], key=lambda x: (x[1], -x[0]), reverse=True)][:2]
return answer
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[프로그래머스] 기능개발 (0) | 2022.05.09 |
---|---|
[프로그래머스] 더 맵게 (0) | 2022.05.08 |
[프로그래머스] 위장 (0) | 2022.03.08 |
[프로그래머스] 전화번호 목록 (정렬보다는 해시를) (0) | 2022.03.07 |
[프로그래머스] 완주하지 못한 선수 (0) | 2022.03.06 |