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

좌표를 정렬하는 기준은
1. x좌표 오름차순
2. x좌표가 같을경우 y좌표 오름차순
이다.
sort()함수는 사용자가 직접 정렬 기준을 정할 수 있어서 sort()를 사용해 코드를 작성했다.
1
2
3
4
5
6
|
import sys
N = int(input())
coords = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
coords.sort(key = lambda x : (x[0], x[1]))
for coord in coords:
print(coord[0], coord[1])
|
cs |
coords라는 list에 좌표를 짝지어 입력하고, sort()로 정렬해준다.
coords와 정렬 후의 coords를 확인하면 다음과 같다.

sort()
sort를 통해 정렬되는 경우, 정렬은 안정적임이 보장된다. = 여러 레코드가 같은 키를 가질 때, 원래의 순서가 유지된다.
그러므로 첫 번째 조건이 같을 때, 두 번째로 입력한 순서대로 정렬하려 한다면 첫 번째 조건만 명시해주면 된다.
sort의 parameter
1. key
정렬을 목적으로 하는 함수를 넣는다. lambda함수를 사용할 수 있다.
sort(key = len) | 요소의 길이를 기준으로 오름차순으로 정렬한다(짧은 것 - 긴 것) |
sort(key = lambda x : x[1]) | 요소가 여러개의 요소를 가진 경우(list안의 list 정렬), 기본 정렬은 x[0]을 기준으로 한다. 두번째 값인 x[1]을 기준으로 하려면 옆과 같이 적어주면 된다. |
sort(key = lambda x : (x[0], x[1])) | 여러 기준으로 정렬하려 할 때, 튜플 형식으로 (첫 번째 기준, 두 번째 기준)을 적어주면 된다. |
x[1]을 기준으로 역순으로 정렬하기 원한다면 -x[1]로 적으면 된다.
2. reverse
bool 값을 넣는다.
기본값은 reverse=False (오름차순)이며, reverse=True 를 적어주면 내림차순으로 정렬할 수 있다.
11651번
11651번도 비슷한 방법으로 문제를 해결할 수 있다.
좌표 정렬하기 2
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

위의 문제와 조건만 다르고 나머지는 같다.
좌표를 정렬하는 기준은
1. y좌표 오름차순
2. y좌표가 같을경우 x좌표 오름차순
이다.
그러므로 sort의 key parameter만 바꿔주면 된다.
1
2
3
4
5
6
|
import sys
N = int(input())
coords = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
coords.sort(key = lambda x : (x[1], x[0]))
for coord in coords:
print(coord[0], coord[1])
|
cs |
lambda x : (x[0], x[1]) 에서 (x[1], x[0])으로 바꾸기만 하면 된다.
*lambda 함수
함수를 한 줄로 쉽게 표현할 수 있는 방법.
lambda 인자 : 표현식
x 와 y를 더하는 함수를 lambda식으로 표현한다면
( lambda x, y : x + y )( 10, 20 )
x와 y를 입력할 때, x+y를 출력하는 함수이다.
map(함수, 리스트)이나 reduce(함수, 시퀀스), filter(함수, 리스트)
에서 함수 자리에 사용할 수 있다.
참고한 페이지
https://docs.python.org/ko/3/howto/sorting.html
정렬 HOW TO — Python 3.9.6 문서
정렬 HOW TO 저자 Andrew Dalke와 Raymond Hettinger 배포 0.1 파이썬 리스트에는 리스트를 제자리에서(in-place) 수정하는 내장 list.sort() 메서드가 있습니다. 또한, 이터러블로부터 새로운 정렬된 리스트를 만
docs.python.org
https://dailyheumsi.tistory.com/67
파이썬 정렬, 다중 조건으로 한 번에 하기.
파이썬으로 문제를 풀다보면, 여러 조건으로 소팅을 해야하는 경우가 있다. 일반적인 소팅은 다음과 같이 sorted() 혹은 .sort() 를 사용한다. a = [4,1,2,5,7,3,6] b = sorted(a) # b = [1,2,3,4,5,6,7] sorted()..
dailyheumsi.tistory.com
https://ooyoung.tistory.com/59
파이썬 정렬 함수 sort, sorted _ key = lambda, function / reverse= 파라미터 이용 방법 (Python)
파이썬 정렬 함수 - 순서 - 1. sort 2. sorted 3. reverse 사용 예시 4. key function, lambda 사용방법 1. sort 원본을 변형시켜 정렬한다. '변수. sort( )' 형태로 사용. 정렬 기준은 문자열은 알파벳, 가나다순..
ooyoung.tistory.com
3.5 람다(lambda)
오늘은 람다 형식과 그것을 이용하는 여러가지 함수들에 대해서 알아보겠습니다. 당장 완벽하게 소화하실 필요는 없을 것 같구요, 가벼운 마음으로 이런 것이 있다는 정도만 아셔도 ...
wikidocs.net
'알고리즘' 카테고리의 다른 글
(파이썬) 백준 알고리즘 - 10814번 (0) | 2021.08.27 |
---|---|
(파이썬) 백준 알고리즘 - 1181번 (0) | 2021.08.27 |
(파이썬) 백준 알고리즘 - 1427번 (0) | 2021.08.26 |
(파이썬) 백준 알고리즘 - 2108번 / Counter (0) | 2021.08.26 |
(파이썬) 백준 알고리즘 - 10989번 (0) | 2021.08.25 |