728x90
10825번: 국영수
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1
www.acmicpc.net
이 문제를 풀며 확실히 기억해야 할 부분이라 싶어 정리한다.
list 의 각 item이 field가 1개 이상인 tuple 이라고 하면 다양한 조건으로 정렬하고 싶을 때가 있을 것이다.
(사람이름, 국어점수, 영어 점수, 수학 점수) 가 한 item 이라면
위 문제처럼
1. 국어 점수 내림차순
2. 영어 점수는 오름차순
3. 수학 점수는 내림 차순
4. 모든 점수가 같으면 이름의 오름 차순
를 모두 접목해 정렬하고 싶을 수 있다.
어떻게?
sort() 함수의 key parameter 를 lambda 식을 이용해 해결 한다.
lambda 식은 Runtime 익명 함수다. 즉 실행될 때 생성되었다가 실행이 끝나면 버려지는 함수인 것이다.
arr.sort(key= lambda x: (-x[1],x[2],-x[3],x[0]))
lambda x 에 (여기서 x는 어떤 이름을 사용해도 좋다) 매핑되는 것은 list 의 각 item 인 (사람이름, 국어점수, 영어 점수, 수학 점수) 이다.
위 조건 1,2,3,4 가 왼쪽 -> 오른쪽 순서대로 매핑된다.
' -x[1] ' 은 각 item 의 2번째 속성을 내림 차순으로 정렬한다 를 의미 한다.
그 뒤의 x[2] 는 앞의 정렬조건에서 동일한 아이템들에 대해 오름 차순으로 정렬한다.
그 뒤도 같은 의미를 지닌다.
'프로그래밍 > 기억노트' 카테고리의 다른 글
[python] union 연산으로 노드 집합 관계 구하기 (0) | 2020.10.07 |
---|---|
[python] 이진 탐색 알고리즘 (0) | 2020.09.11 |
[intelliJ] 인텔리제이 다중 커서 (multi-cursor) (1) | 2020.09.04 |
[python] 진행 방향 시계,반시계 방향 꺾기 돌리기 (0) | 2020.09.01 |
[python] 2차원 리스트 90도 돌리기 (0) | 2020.08.31 |