공부하기/백준

[Python] 백준 풀기 11651 - 좌표 정렬하기 2

XEV 2022. 10. 27. 21:38

파이썬 백준 11651번

실버5

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번 문제의 연장선이다. 다시금 key 를 이용한 sort() 함수를 사용해보았다.

https://xcevor.tistory.com/75

 

[Python] 백준 풀기 11650 - 좌표 정렬하기

파이썬 백준 11650번 실버4 https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다...

xcevor.tistory.com

이전 문제의 정렬의 중심은 x 좌표였는데, 이번 문제의 중심은 y 좌표로 바뀌었다.

그래서 x 좌표를 기준으로 먼저 정렬하고 y 좌표 기준으로 한 번 더 정렬해 주면 된다.

x 나 y 좌표 둘 다 오름차순 정렬이어서 이전 문제와 크나큰 특이사항이 없었는데, 하나는 오름차순, 다른 하나는 내림차순 정렬을 하라고 문제 제시했으면 더 좋았을 것 같다.

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

def fnSort(coordinate_ls):
    coordinate_ls.sort(key=lambda x: (x[1], x[0]))
    print(coordinate_ls)            # test print
    
    for coor in coordinate_ls:
        print(*coor)


if __name__ == "__main__":
    N = int(inputdata().strip())
    coordinate_ls = [list(map(int, inputdata().split())) for _ in range(N)]
    print(coordinate_ls)            # test print
    
    fnSort(coordinate_ls)



# 5
# 0 4
# 1 2
# 1 -1
# 2 2
# 3 3

# [[0, 4], [1, 2], [1, -1], [2, 2], [3, 3]]
# [[1, -1], [1, 2], [2, 2], [3, 3], [0, 4]]

# 1 -1
# 1 2
# 2 2
# 3 3
# 0 4