CS/알고리즘

백준 11651번 좌표 정렬하기 2 파이썬 풀이

happy_life 2022. 3. 3. 10:56

문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.


 

정답풀이1

-꽈배기처럼 x좌표와 y좌표를 직관적으로 바꾸는 코드

#좌표 정렬하기 2
#2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로,
#  y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

from array import array
import sys

N = int(input())
xy_arrays = []
#1. 값넣기
for i in range(N):
    x,y = map(int,sys.stdin.readline().split())
    xy_arrays.append([y,x])

xy_arrays.sort()

for y,x in xy_arrays:
    print(x,y)

정답풀이2

-람다식으로 sort 정렬 방식 바꾸기

#좌표 정렬하기 2
#2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로,
#  y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

from array import array
import sys

N = int(input())
xy_arrays = []
#1. 값넣기
for i in range(N):
    xy_arrays.append(list(map(int,sys.stdin.readline().split())))

xy_arrays.sort(key= lambda x: (x[1],x[0]))

for i in xy_arrays:
    print(i[0],i[1])

 

 

**람다식 심화공부

함수를 간단하게 표현하는 것

 

정의: 익명 함수

def hap(x, y):
	return x + y
hap(10,20)

-----------------

(lambda:x,y : x + y)(10,20)

 

파이썬 sort에서의 사용

sort(key = lambda x: (조건1,조건2,...))

->조건1을 기준으로 정렬하고 그 다음 조건2로 정렬

ex)

a = [(1, 2), (0, 1), (5, 1), (5, 2), (3, 0)]

c = sorted(a, key = lambda x : x[0]) #x 기준 정렬
# c = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]

d = sorted(a, key = lambda x : x[1]) #y 기준 정렬
# d = [(3, 0), (0, 1), (5, 1), (1, 2), (5, 2)]

e = [(1, 3), (0, 3), (1, 4), (1, 5), (0, 1), (2, 4)] #x 기준으로 오름차순 정렬 -> y기준으로 내림차순
f = sorted(e, key = lambda x : (x[0], -x[1]))
# f = [(0, 3), (0, 1), (1, 5), (1, 4), (1, 3), (2, 4)]