elevne's Study Note

백준 Python 문제풀이 (11651번: 좌표 정렬하기 2) 본문

ETC/BOJ

백준 Python 문제풀이 (11651번: 좌표 정렬하기 2)

elevne 2023. 6. 3. 21:20

링크: 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

 

 

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

 

 

11651번: 좌표 정렬하기2

 

 

 

정렬 기준이 2 개가 있는 문제였다. 파이썬에서는 sort 함수의 key 파라미터를 사용하여 정렬 기준을 직접 정해줄 수 있다. 이 때, 여러 개의 정렬 기준을 잡아줄 수도 있다. 아래와 같은 코드로 간단히 해결할 수 있다.

 

 

import sys

def solution():
    n = int(sys.stdin.readline())
    arr = list()
    for _ in range(n):
        arr.append(tuple(map(int, sys.stdin.readline().split())))
    arr.sort(key=lambda x: (x[1], x[0]))
    for c in arr:
        print(str(c[0]) + " " + str(c[1]))

if __name__ == "__main__":
    solution()

 

 

 

다른 더 빠른 풀이를 보니 직접 정렬을 위한 기준 함수를 작성하여 실행한 것이 있었다. 아래와 같이 작성되었다.

 

 

import sys

def cond(dot):
    x, y = dot.split()
    return int(y) + int(x)/1000000

dots = sorted(sys.stdin.readlines()[1:], key=lambda x: cond(x))
print(''.join(dots))