백준 11650번 '좌표 정렬하기' - [Python] sys, sort, Generator Expression

림민지·2025년 1월 24일

#️⃣ 11650번

문제

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()

이 방법도 제한 시간 내에 출력은 가능하지만, 출력 시간을 더 개선할 수 있는 방법이 있었다.

🔮 개선된 코드

by 출력 최적화

출력 최적화 : 한 번에 모든 출력

sys.stdout.write("\n".join(f"{x} {y}" for x, y in L) + "\n")

for문 대신, sys.stdout.write를 사용해서 한 번에 모두 출력하자

✅ Generator Expression

f"{x} {y}" for x, y in L은 Generator Expression으로 동작
리스트를 한 번에 만드는 대신, 필요할 때마다 하나씩 생성
메모리를 절약할 수 있어 대규모 데이터 처리에 유리!

profile
@lim_128

0개의 댓글