나이가 적은 순으로 출력하고, 나이가 같다면 먼저 입력한 순서대로 출력해야하는 문제이다.
딕셔너리는 순서가 없고, 같은 키에 대해 값이 덮어씌워지므로 리스트를 사용하도록 하겠다.
리스트의 요소는 입력을 나이와 이름 세트로 받으므로 튜플을 이용헤 나이와 이름을 한 세트로 묶어준다.
sorted(members, key = itemgetter(0)) 은 key를 나이 순으로 정렬하게끔 해준다.
lambda item: item[0] 보다 itemgetter을 쓰는게 조금 더 빠르다고 해서 itemgetter을 사용했다.
from operator import itemgetter
import sys
input = sys.stdin.readline
members = []
for _ in range(int(input())):
age, name = input().split()
members.append((int(age), name))
res = sorted(members, key = itemgetter(0))
#key = lambda item: item[0]
for s in res:
print(s[0], s[1])
인터넷을 뒤지다 보니, 리스트 안에 딕셔너리를 넣는 방법도 있나보다.
비슷한 문제인 좌표 정렬 문제이다.
2차원 평면 위의 점을 x좌표가 증가하는 순으로, x좌표가 같다면 y좌표가 증가하는 순으로 정렬하여 출력한다.
x좌표를 먼저 정렬하게되면 y좌표 순으로 정렬하면서 정렬이 망가지므로, y좌표대로 정렬하여 x좌표순으로 정렬한다.
import sys
from operator import itemgetter
input = sys.stdin.readline
pos = []
for _ in range(int(input())):
x, y = map(int, input().split())
pos.append((x, y))
pos.sort(key = itemgetter(1))
pos.sort(key = itemgetter(0))
for x, y in pos:
print(x, y)