새벽까지

좌표 정렬하기 2 - 11651

분류

정렬

문제 설명

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

입력

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


🙋 문제 해석

이 문제는 2차원 평면상의 점들이 주어졌을 때, 이를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순으로 정렬하여 출력하는 문제입니다..!

 

sort까지는 다들 알겠지만 sort로 풀게되면 x좌표부터 정렬하는 현상이 생기는데,

 

이때 sort(key=function) 인자를 사용하면 됩니다.

🔑 Solution 🔑

input = sys.stdin.readline
T = int(input())
cor=[]
for _ in range(T) :
    cor.append(list(map(int,input().split())))

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

for i in range(len(cor)) :
    print(f"{cor[i][0]} {cor[i][1]}")

먼저 이 문제를 이해하는데 있어서 labmda에 대한 기본지식이 필요합니다.

 

 

 

# 이런 형식
lambda 인자 : 반환값

# 예
lambda x : x * 2 # x라는 인자를 받아서 x를 2배한 값을 반환

sort 함수의 key 인자에 lambda 함수를 사용하면, 리스트를 정렬할 때 어떤 기준으로 정렬할 지를 지정할 수 있습니다

 

 

 

numbers = [(3, 2), (1, 1), (2, 3), (1, 2)] # 
numbers.sort(key=lambda x: (x[1], x[0]))
[(1, 1), (1, 2), (3, 2), (2, 3)]

결과 값

🙇

profile

새벽까지

@GoS

좋아요❤️ 구독👍🏻 감사합니다!