https://www.acmicpc.net/problem/10814
이 문제는 이중 리스트일 때 첫 번째 인덱스의 기준으로만 정렬을 하고, 인덱스가 같다면 먼저 온 순서대로(stable sorting) 출력을하는 문제이다.
[21 Junkyu] 와 같이, 나이 + 이름이 입력으로 주어진다. 처음 들었던 생각은 나이를 key 값으로 따로 빼서 정렬한 후 해당 나이에 해당하는 이름을 하나씩 가져와서 출력을 하는 방법을 생각했지만, 파이썬의 sort() 함수를 사용하면 간단하게 풀리는 문제였다.
두 개의 입력을 리스트로 받아와 다른 리스트에 넣어준다. 이 때 나이의 값은 int형으로 바꿔주어야 한다. 그렇지 않으면 str형태로 정렬이 되어 12 값이 3보다 앞에 놓이게 된다.
입력받은 값들이 들어 있는 리스트를 0번째 인덱스인 나이를 기준으로 정렬을 해준다.
파이썬의 sorted() 함수는 기본적으로 stable sorting을 지원하기 때문에 두 번째 인덱스인 이름은 정렬 전의 순서가 유지된다.
import sys n = int(sys.stdin.readline()) data_list = [] for i in range(n): [a,b] = list(map(str,sys.stdin.readline().split())) data_list.append([int(a), b]) data_list = sorted(data_list, key=lambda x : x[0]) for a, b in data_list: print(a, b)
정렬과, lambda의 정리는 여기