
1. 첫 번째 풀이 (리스트)
# 좌표 정렬하기
import sys
input = sys.stdin.readline
n = int(input())
location = []
for _ in range(n):
location.append(list(map(int, input().split())))
location.sort()
for i in range(n):
print(location[i][0], location[i][1])
각 좌표값을 리스트 형식으로 입력받아 풀었다.
sort() 함수를 사용하면 자동으로 x좌표를 기준으로 오름차순으로 정렬하고, x좌표 값이 같다면 y좌표를 기준으로 오름차순으로 정렬해 준다.
2. 두 번째 풀이 (튜플)
# 좌표 정렬하기(튜플로 받기)
import sys
input = sys.stdin.readline
n = int(input())
location = []
for _ in range(n):
location.append(tuple(map(int, input().split())))
location.sort(key=lambda x: (x[0], x[1]))
for i in location:
print(i[0], i[1])
각 좌표를 튜플 형식으로 입력받아 풀었다.
sort() 함수의 key 매개변수를 사용하였다.
sort() 함수는 오직 리스트에만 사용 가능하고, sorted() 함수는 모든 이터러블 타입에서 사용 가능하다.
sort() 함수는 원 데이터를 변경하고 반환 값이 None이며, sorted() 함수는 원 데이터를 변경하지 않고 정렬된 새로운 이터러블을 반환한다.
key 매개변수를 통해서 리스트의 각 요소에 함수를 적용한 결과값으로 정렬할 수 있다.
다음은 리스트의 각 문자열 요소에 len 함수를 적용한 결과값을 기준으로 정렬한 모습이다.
nums = ["one", "two", "three", "four"]
nums.sort(key=len)
print(nums)
# ['one', 'two', 'four', 'three']
두 번째 풀이에서 사용한 다음 코드는 리스트 내부 튜플의 0번째 인덱스 요소를 기준으로 정렬하고, 0번째 값이 같다면 1번째 인덱스 요소 값을 기준으로 정렬해달라는 의미이다. (오늘 처음 알았음..)
location.sort(key=lambda x: (x[0], x[1]))
앞으로 종종 사용할 일이 있을 것 같으니 외워두자.
3. 백준 11651번 좌표 정렬하기 2

위의 문제는 x좌표를 우선 비교했다면 이 문제는 y좌표를 기준으로 먼저 정렬한 후 그 다음 x좌표를 비교한다.
코드에서 한 부분만 바꿔주면 된다.
location.sort(key=lambda x: (x[1], x[0]))
1번 인덱스(y좌표)를 기준으로 먼저 정렬한 후 같은 값이 있다면 0번 인덱스(x좌표)를 기준으로 정렬해주는 코드이다.
참고 링크
https://docs.python.org/ko/3/howto/sorting.html
Sorting HOW TO
Author, Andrew Dalke and Raymond Hettinger,, Release, 0.1,. Python lists have a built-in list.sort() method that modifies the list in-place. There is also a sorted() built-in function that builds a...
docs.python.org
https://haesoo9410.tistory.com/193
<파이썬> 2차원 배열 정렬
1. 기본적인 리스트 정렬 * sort 정렬 - sort는 리스트에서 제공되는 기본적인 메서드이다. 주로 아래와 같이 사용한다. lst = [2, 3, 5, 6, 1, 4] lst.sort() print(lst) # [1, 2, 3, 4, 5, 6] - sort 는 기본적으로 오름
haesoo9410.tistory.com
'알고리즘 > 정렬' 카테고리의 다른 글
| [백준 18870번]좌표 압축(파이썬) (0) | 2023.01.21 |
|---|---|
| [백준 10814번]나이순 정렬(파이썬) (0) | 2023.01.20 |
| [백준 1181번]단어 정렬(파이썬) (0) | 2023.01.20 |