알고리즘
백준 11650: 좌표 정렬하기 Python
짱이 되었어
2022. 9. 16. 10:11
https://www.acmicpc.net/problem/11650
11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
이 문제에서 필요한 것은 lambda였다.
arr.sort(key=lambda x: x[0])을 쓰면 각 행의 첫 번째 열을 기준으로 오름차순 정렬되기 때문에 [3, 4]가 [3, 3]보다 먼저 나오게 된다.
먼저 첫 번째 열을 기준으로 오름차순 하고, 이후 두 번째 열을 기준으로 오름차순을 한 번 더 하고 싶다면, arr.sort(key=lambdad x: (x[0], x[1]))로 작성하면 된다.
from sys import stdin
input = stdin.readline
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
arr.sort(key=lambda x: (x[0], x[1]))
for i in range(N):
print(*arr[i])
코드의 첫 번째, 두 번째 문장은 입력을 빨리 받기 위해 쓰는 것이다.
N의 범위가 1 ≤ N ≤ 100,000와 같고, sort 함수를 써야 하기 때문에 입력을 빨리 받을수록 수행 시간을 줄일 수 있다.
아래 코드들을 넣었을 경우 412ms, 넣지 않았을 경우 4416ms가 걸렸다.
from sys import stdin
input = stdin.readline