[백준 5635] 생일
sort()에서는 key에 어떤 임의의 정렬 함수를 설정하여 원하는 기준에 따라 정렬할 수 있습니다.
첫째 줄에 학생수 n이 주어지고 둘째 줄부터 이름, 생일이 공백을 두고 주어집니다.
sort() 함수로 정렬하기 위해 2차원 리스트로 만들어보겠습니다.
2차원 리스트는 리스트 안에 리스트를 넣어서 만들 수 있으며 각 리스트 요소들은 ,(comma)로 구분합니다.
즉, ‘리스트 = [[a, b], [c, d], [e, f]…]’ 와 같은 형태를 가지게 됩니다.
따라서 입력을 모두 받는다면 이름, 일, 월, 연도순으로 입력된 리스트들이
하나의 큰 전체 리스트에 저장될 것입니다.
(ex> students = [[Mickey, 1, 10, 1991], [Alice, 30, 12, 1990], [Tom, 15, 8, 1993]])
이때, sort() 함수에 key를 설정해주면 그 key를 기준으로 삼아 리스트의 요소들을 정렬할 수 있습니다.
key에는 원하는 정렬 함수를 설정해줄 수 있는데, 보통 lambda 함수를 많이들 사용하여 간편하게 작성합니다.
(ex> sort(key=lambda x:x[0])은 리스트의 요소들 중 인덱스 0인 요소들을 기준으로 정렬합니다.)
당연히, 생일이 제일 빠른 사람이 나이가 많을 것이고
제일 느린 사람이 나이가 적을 것이기 때문에
1차적으로 연도(year)를 기준으로 오름차순 정렬,
2차적으로 월(month)을 기준으로 오름차순 정렬,
마지막으로 일(day)을 기준으로 오름차순 정렬을 한다면
리스트의 요소들을 생일이 가장 빠른 사람부터 느린 사람 순으로 정렬할 수 있게 됩니다.
더불어, 조건 기준이 여러개일 때에는 기준들을 괄호로 묶어 설정합니다.
즉, sort(key=lambda x: (int(x[3]), int(x[2]), int(x[1])))로 설정해줍니다.
이때, 앞에 ‘-‘를 붙이면 내림차순으로 정렬한다는 것을 의미합니다.
sort(key=lambda x:(정렬 대상)) 혹은 sorted(list, key=lambda x:(정렬 대상)) 로
원하는 정렬을 할 수 있다는 점에 주목합시다.
문제 : 백준 5635 - 생일