본문 바로가기
Algorithm/백준 문제풀이

[python]11650-좌표 정렬하기

by B_Tori 2021. 8. 31.

문제

파이썬 풀이

튜플로 2차원 좌표를 입력받아 리스트 안에 저장한 후, x좌표를 기준으로 오름차순 정렬하는 문제이다. (x좌표가 같을 시 y좌표 비교)

import sys
input = sys.stdin.readline

n= int(input().rstrip())
v = []
for i in range(n) :
  x, y = map(int, input().rstrip().split())
  v.append((x,y))

v.sort()

for x,y in v :
  print(x,y)

시간 복잡도 개선을 위해 input대신 sys.stdin.readline을 사용하였다.

단, readline으로 입력을 받으면 끝에 개행 문자를 가져온다 하여 rstrip을 통해 제거하여주었다.

입력받기

for i in range(n) :

  x, y = map(int, input().rstrip().split())

  v.append((x,y))

v라는 리스트 안에 x, y좌표를 튜플 형태로 저장하였다.

정렬하기

기본적으로 튜플이 저장된 리스트에서 sort함수를 적용하면 문제와 같은 정렬 기준으로 정렬되어 그냥 sort()만을 이용해 정렬하여 문제를 해결하였다.

그 외의 정렬 방법은 sort의 인자에 key값을 부여하여 할 수 있다. 기본적으로 오름차순으로 정렬되며 내림차순으로 정렬하기 위해서는 reverse=true 매개변수를 추가로 부여하면 된다.

v.sort(key=lambda x :x[0]) #첫 번째 인자로 오름차순 정렬
v.sort(key=lambda x :-x[0]) #첫 번째 인자로 내림차순 정렬1
v.sort(key=lambda x :x[0],reverse=Tre) #첫 번째 인자로 내림차순 정렬2
v.sort(key=lambda x :x[1]) #두 번째 인자로 오름차순 정렬
v.sort(key=lambda x :(x[0],x[1])) #첫 번째 인자로 오름차순 정렬, 같으면 두 번째 인자로
v.sort(key=lambda x :(x[1],x[0])) #두 번쨰 인자로 오름차순 정렬, 같으면 첫 번째 인자로
v.sort(key=lambda x :(-x[0],x[1])) #첫 번째 인자로 내림차순 정렬, 같으면 두 번째 오름차순

댓글