2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
💡 시간제한 1초! 그리고 N (1 ≤ N ≤ 100,000) 이걸 봤을때, 런타임 에러가 나지 않으려면 sys를 써야겠다고 생각했다.
N 입력받고, xy값들을 저장할 리스트 L 초기화.
N번 동안 sys.stdin.readline() 사용해서 x,y 입력받기
입력받은 값을 L리스트에 저장!
sort() 사용해서 L리스트 안에서 정렬 후
인덱싱으로 프린트하기
#좌표 정렬하기
import sys
N = int(input())
L = []
for i in range(N) :
x, y = map(int, sys.stdin.readline().split())
L.append((x,y))
L.sort()
for i in range(N) :
for j in range(2) :
print(L[i][j], end = ' ')
print()
이 방법도 제한 시간 내에 출력은 가능하지만, 출력 시간을 더 개선할 수 있는 방법이 있었다.
sys.stdout.write("\n".join(f"{x} {y}" for x, y in L) + "\n")
for문 대신, sys.stdout.write를 사용해서 한 번에 모두 출력하자
f"{x} {y}" for x, y in L은 Generator Expression으로 동작
리스트를 한 번에 만드는 대신, 필요할 때마다 하나씩 생성
메모리를 절약할 수 있어 대규모 데이터 처리에 유리!