2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
5
0 4
1 2
1 -1
2 2
3 3
1 -1
1 2
2 2
3 3
0 4
import sys
N = int(sys.stdin.readline().strip())
coordinates = []
for i in range(N):
coordinates.append(list(map(int, sys.stdin.readline().strip().split())))
coordinates = sorted(coordinates, key=lambda a : (a[1], a[0]))
for coordinate in coordinates:
print(*coordinate)
이 문제의 경우 lambda를 활용하면 간단하게 풀 수 있다.
N
과 coordinates
에 2차원 좌표들을 입력 받은 뒤, lambda
를 활용해 y좌표를 기준으로 먼저 정렬시킨다.
그 후, x좌표를 기준으로 정렬시켜 문제에서 요구하는 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬할 수 있다.
또, print
를 이용해 리스트를 출력할 때 *
를 앞에 붙이면 대괄호
를 생략하고 출력이 가능하다