알고리즘/알고리즘 문제 풀이

(Python) 백준 11651번 - 좌표 정렬하기 2

용꿀 2022. 12. 30. 15:59

문제 링크 : https://www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net

 

풀이

11650번 문제와 정렬 순서가 바뀌었을 뿐, 동일한 정렬 문제로 볼 수 있다.

sort() 함수에 key로 lambda 함수를 넘겨주게 되면, 이 함수의 반환값을 기준으로 순서대로 정렬하게 된다.

여기서는 x[1], x[0] 순으로, 즉 리스트의 두번째 요소인 y좌표로 정렬 후에 첫번째 요소인 x좌표를 기준으로 정렬하게 되는 것이다. 

import sys
num = int(sys.stdin.readline())
xys = []
for _ in range(num):
    xy = list(map(int, sys.stdin.readline().split()))
    xys.append(xy)
for x, y in sorted(xys, key=lambda x: (x[1], x[0])): # 리스트의 두번째 element인 y좌표를 기준으로 정렬 후 첫번째 element인 x좌표를 기준으로 정렬
    print(x, y)