짱이 될거야
백준 11650: 좌표 정렬하기 Python 본문
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
'알고리즘' 카테고리의 다른 글
백준 4485: 녹색 옷 입은 애가 젤다지? Python (Dijkstra) (0) | 2022.09.27 |
---|---|
백준 1966: 프린터 큐 Python (0) | 2022.09.17 |
백준 1018: 체스판 다시 칠하기 Python (Brute Force) (0) | 2022.09.15 |
백준 22864: 피로도 Python (0) | 2022.09.13 |
백준 1749: 점수따먹기 Python (0) | 2022.09.07 |
Comments