이번에는 python의 조건이 있는 sort()에 대해서 알아보고,
tuple이 쭉 있을 때 [ (1, a), (2, b) ]
앞에 숫자에 대해서 sort 한 번, 뒤의 글자에 대해서 sort 한 번 식의 다중 sort(),
그리고 이걸 lambda로 구현,
하는 걸 다뤄보자.
결론부터 보면,
.sort(key = lambda x: (-x[1], x[0]))
1. key = sort의 기준!
2. 익명 함수인 lambda x 를 사용해주었다.
lambda x : x[0] 을 하면 x의 0th element를 기준으로 "오름차순" 으로 정렬해준다.
3. (-x[1], x[0])
에서 -는 내림차순, 냅두면 오름차순이며, -x[1]을 먼저 써주는 이유는 이거를 기준으로 먼저 정렬하고, 그 상태에서 x[0]을 기준으로 정렬하고 싶기 때문이다.
문제의 코드는 바로,
.sort(key = lambda x: (-x[1], x[0]))
부분이다.
이게 무슨 뜻인고 하니,
일단 .sort()를 쓸건데, 뭔가의 기준을 부여하고 싶어서 어떤 걸 key (기준) 으로 sort 할 것이냐를 key = 로 명시해준 것이다.
약간 데이터베이스에서 key를 기준으로 움직이듯이 생각하면 될 것 같다. key = sort의 기준!
key = 여기다가 기준이 될 함수를 넣어주면 된다.
익명 함수인 lambda x 를 사용해주었다.
lambda x : x[0] 을 하면 x의 첫 번째 element를 기준으로 "오름차순" 으로 정렬해준다.
a = [ (1, 3), (0, 4), (2, 1) ]
a.sort(key = lambda x: x[0]) 해주면 / 튜플들 중에 가장 첫 번째 숫자를 기준으로 오름차순 정렬이다.
a = [ (0, 4), (1, 3), (2, 1) ]
만약 sort를 두 번 하고 싶다면? 일단 튜플의 첫 번째 숫자를 오름차순으로 쭉 정리해놓고, 그 상태에서 튜플의 두 번째 숫자를 기준으로 내림차순으로 쭉 정리하고 싶으면?
위의 코드처럼
.sort(key = lambda x: (x[0], -x[1]))
이런 식이다. lambda 안에 오는 애들을 이번엔 괄호로 묶어서 튜플로 넣어준다. 이게 조건 정렬을 실행하는 순서이다.
-x[1] 에서 -는 내림차순을 뜻한다. 가만히 냅두면 오름차순, 마이너스 붙여주면 내림차순!
위의 코드를 다시 보자. 이번엔 문제와 같이 보자.
문제를 보면,
1. 일단 장르별 노래가 수록되어있는 dict()를 만들고,
2. 가장 많이 재생된 장르를 계속해서 찾고
3. 그 장르 loop 돌 때 마다 answer에 인덱스를 순차적으로 넣어주면 된다.
코드를 보자.
여기서 마지막 부분에 들어가기 전에 dict가 어떻게 생겼냐면,
이래 생겼다.
while 문 안에서 보면,
가장 재생 많이 된 장르 하나를 잡고 그 안에서 돈다. 장르의 value가 리스트로 된 여러 개의 튜플이다.
여기서 재생이 많이 된 노래들을 순차적으로 보고(내림차순), 혹시 재생수가 같으면 더 작은 index를 넣어준다. (오름차순)
그래서 우선적으로 play 횟수인 x[1]을 내림차순으로 정렬해주기 위해 -x[1]을 먼저 써주고,
그 상태에서 index들을 오름차순으로 하기 때문에, .sort(key = lambda x: (-x[1], x[0]))
이렇게 되는 것이다.
'LeetCode' 카테고리의 다른 글
while문 조건의 순서 (0) | 2025.02.05 |
---|---|
sort() 와 sorted() 차이 (0) | 2025.01.11 |
Element 2개일 때 1개 무시, 하나에 대해서만 조작하기 / for 문 한 번에 쓰기 (0) | 2025.01.10 |
[프로그래머스] Hash - 하나의 Key에 여러 Tuple value (0) | 2025.01.10 |
zip() 함수 사용하기 (0) | 2025.01.09 |