백준 정렬 11650번

안녕하세요. GDSC 안드로이드 멤버 한윤재입니다.
백준 정렬 11650번 문제를 풀었습니다.

11650번 코드

2차원 평면 위의 점들을 입력받아 정렬합니다.
이때, x 좌표의 오름차 순으로 정렬하고, x 좌표가 같으면 y 좌표의 오름차 순서로 정렬합니다.

다음은 제 풀이 코드입니다.

import sys
n= int(sys.stdin.readline())
arr= [0]*n
for i in range(n) :
    arr[i] = list(map(int , sys.stdin.readline().split( )))
arr.sort(key=lambda x: (x[0], x[1]))
for i in range(n) :
    print(arr[i][0] ,arr[i][1])

2차원 배열로 풀었는데, 아직 파이썬에 익숙하지 않아서 코드가 복잡해졌습니다. 생각해보니 파이썬에는 더 간단한 내장함수가 있을 것 같아 sort 함수를 구글링했습니다.

sort 함수에 key=lambda 로 여러 조건을 걸 수 있었습니다. 이 특성을 통해 위의 문제도 해결할 수 있더군요.


lambda 함수

lambda 함수에 대해 조금 더 알아보았습니다.

lambda 함수는 파이썬에서 사용되는 “익명 함수”입니다. 쓰고 버리는 일시적인 함수로, 함수가 생성된 곳에서만 필요합니다.

lambda 함수의 정의는 ‘lambda 인자리스트 : 표현식’ 입니다.
예시를 살펴봅시다.

다음은 map 함수입니다.

map(함수, 리스트)


이 함수는 인자로 함수와 리스트를 받습니다. 리스트에서 요소를 꺼낸 다음 함수에 넣고 새로운 리스트에 입력합니다.

>>> map(lambda x: x ** 2, range(5))
[0, 1, 4, 9, 16]

위에서 map은 range(5)가 주는 [0, 1, 2, 3, 4] 리스트에서 한 요소씩 꺼내 제곱을 한 뒤에 새로운 리스트에 넣습니다.

이처럼 lambda 함수는 프로그램 내에서 코드를 간단하게 만들어 줍니다.


마무리

11650번 문제 풀이에 사용한 lambda 함수를 알아봤습니다.
이외에도 파이썬에는 코드를 간결하고 가독성 있게 도와주는 내장함수가 많은 것 같네요.
아직 갈 길이 먼 왕초보 개발자였습니다.


참고자료

https://wikidocs.net/64
https://offbyone.tistory.com/73