알고리즘

[파이썬] 단계별 백준 문제 풀기 - 11651 정렬 (좌표정렬하기 2)

햄❤️ 2021. 3. 10. 01:15
반응형

 

문제

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

입력

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

출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.


<<코드>>

import sys #시간을 줄이기 위해 sys 모듈을 import하고 input값을 sys.stdin.readlind()으로 받음
n = int(input()) #첫째줄 점의 갯수
arr = [] # 점의 좌표들을 넣을 빈 리스트 생성

# 점의 갯수만큼 for문 실행
for i in range(n):
  line = list(map(int,sys.stdin.readline().split()))
  arr.append(line)
  
  #sort(오름차순 정렬) 하는데 x값은 x[1]번째(=y좌표)를 기준으로, 그 다음에 x[0]번째(=x좌표) 기준
arr.sort(key=lambda x: (x[1],x[0]))

#arr 리스트에서 0번째(x), 1번째(y) 값 순차출력
for i in arr:
  print(i[0],i[1])

 

<<결과값>>

$ python main.py
5
0 4
1 2
1 -1
2 2
3 3

1 -1
1 2
2 2
3 3
0 4

 


lambda 함수를 알면 쉽게 풀 수 있다. 이 문제 덕분에 sort, lambda 함수를 공부할 수 있었다!

 

 - sort() : 변수.sort() 형태로 사용! 정렬기준은 문자열은 알파벳,가나다 순이며 숫자는 오름차순

 - sorted(): 원형을 변형시키지 않고 정렬된 결과를 반영함. * sort()는 원형을 변형시켜 정렬

 - sort의 매개변수 key, key=lambda x:x[1] -> key 값을 기준으로 정렬. x가 input이고 x[1]번째 기준으로 오름차순  

 

728x90
반응형