본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 11650, 11651번: 좌표 정렬하기, 좌표 정렬하기 2 -Python

728x90

[백준알고리즘] 11650, 11651번: 좌표 정렬하기, 좌표 정렬하기 2 -Python

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

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

파이썬으로 하는데 간단하고 너무 같은 거라 묶었다.

 

11650은 리스트의 sort()를 사용했고 11651은 sorted를 사용했다. 둘의 차이점은 해당 리스트에 직접 정렬하느냐 정렬한 리스트를 반환하느냐의 차이이다.

 

11651의 경우에는 sorted()를 사용하면서 key를 이용하기 위해서 lambda까지 사용했다. x가 주어졌을 때 x[1]을 반환한다는 것을 의미한다.

 

이러한 방식이 싫다면 이분탐색이든지... 시도해보면 될 것 같다!

 

11650 코드다.

import sys

testcase = int(sys.stdin.readline())
table = [list(map(int, sys.stdin.readline().split())) for _ in range(testcase)]

table.sort()
for t in table:
    sys.stdout.write(str(t[0]) + " " + str(t[1]) + "\n")

 

11651 코드다.

import sys

testcase = int(sys.stdin.readline())
table = [list(map(int, sys.stdin.readline().split())) for _ in range(testcase)]

table = sorted(sorted(table), key=lambda x:x[1])
for t in table:
    sys.stdout.write(str(t[0]) + " " + str(t[1]) + "\n")

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90