알고리즘

(파이썬) 백준 알고리즘 - 11650번, 11651번 / sort(), lambda 함수

joy_lee 2021. 8. 27. 16:18

좌표 정렬하기

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
= 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
= 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

 

https://wikidocs.net/64

 

3.5 람다(lambda)

오늘은 람다 형식과 그것을 이용하는 여러가지 함수들에 대해서 알아보겠습니다. 당장 완벽하게 소화하실 필요는 없을 것 같구요, 가벼운 마음으로 이런 것이 있다는 정도만 아셔도 ...

wikidocs.net