좌표 정렬하기
https://www.acmicpc.net/problem/11650
좌표를 정렬하는 기준은
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
위의 문제와 조건만 다르고 나머지는 같다.
좌표를 정렬하는 기준은
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
https://dailyheumsi.tistory.com/67
https://ooyoung.tistory.com/59
'알고리즘' 카테고리의 다른 글
(파이썬) 백준 알고리즘 - 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 |