Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

짱이 될거야

백준 11650: 좌표 정렬하기 Python 본문

알고리즘

백준 11650: 좌표 정렬하기 Python

jeong57 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

 

Comments