0%

BOJ 11650

Input

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다.

둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

1
2
3
4
5
6
7
8
import sys
input = sys.stdin.readline

n = int(input())
s = []

for _ in range(n):
s.append(list(map(int, input().split())))

Sort

sort 함수에 key 를 이용하면 쉽게 해결되는데, 이를 위해서 sort 함수를 살펴보자.

sort()

Basic Syntax

1
list.sort(key=..., reverse=...)

Parameters

  • key : sort 수행 시 비교 를 위해 적용되는 함수

    • e.g. 1D

      1
      list.sort(key=len)

      len 함수에 따라 리스트의 요소의 길이가 정렬 기준이 된다.

    • e.g. 2D

      tuple의 경우, 첫번째 파라미터가 디폴트로 정렬 기준이 된다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      # random list
      random = [(2, 2), (3, 4), (4, 1), (1, 3)]

      # sort list with key
      random.sort(key=(lambda x: x[1]))

      ### lambda to function declaration
      # key=takeSecond
      # def takeSecond(elem):
      # return elem[1]

      위의 예시에서는, 튜플 x 의 2번째 파라미터를 기준으로 정렬을 수행한다.

  • reverse : 기본 오름차순, True 시 내림차순

Return Value

None 👉 원본을 수정한다.

sorted()

sorted list 👉 원본을 수정하지 않고, 새로운 리스트를 반환한다.

위에 따라 key 를 지정해서 sort 함수를 커스터마이징하면,

1
s.sort(key=(lambda x: (x[0], x[1])))

이는 즉, 튜플 x 의 1번째 인자를 첫 기준으로 두고, 2번째 인자를 두번째 기준으로 둔다 는 의미이다.

Output

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

1
2
for i in s:
print(i[0], i[1])