Love Every Moment

〔백준/파이썬〕11651번 좌표 정렬하기2 본문

PROGRAMMING::LANGUAGE/Python

〔백준/파이썬〕11651번 좌표 정렬하기2

해 송 2022. 7. 31. 16:10
반응형

 

출처

 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net

 


 

문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

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

 


 

예제

# 입력
5
0 4
1 2
1 -1
2 2
3 3
# 출력
1 -1
1 2
2 2
3 3
0 4

 


 

풀이

import sys

N = int(sys.stdin.readline().rstrip())

# 좌표 리스트
points = list()
for _ in range(N):
	point = tuple(map(int, sys.stdin.readline().rstrip().split()))
	points.append(point)
points.sort(key = lambda x: (x[1], x[0]))
for x, y in points:
	print(x, y)

 


 

노트

  • 만약 11650번 문제처럼 x좌표-y좌표 순으로 정렬하는 거라면 일반적인 sort() 로 해결 가능
  • 하지만 이 문제에서는 y좌표가 증가하는 순으로 정렬하되, y좌표가 같으면 x좌표가 증가하는 순으로 정렬
  • 따라서 sort() 의 매개변수 key 에 무엇을 기준으로 정렬하는지 알려주어야 한다
  • points.sort(key = lambda x: (x[1], x[0])) 를 통해 우선 y좌표를 기준으로 정렬하게 하고, 만약 y좌표가 같은 경우 x좌표를 기준으로 정렬하도록 할 수 있다
반응형
Comments