elevne's Study Note
백준 Python 문제풀이 (11651번: 좌표 정렬하기 2) 본문
링크: 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좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
정렬 기준이 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))
'ETC > BOJ' 카테고리의 다른 글
백준 Python 문제풀이 (1676번: 팩토리얼 0의 개수) (0) | 2023.06.05 |
---|---|
백준 Python 문제풀이 (2805번: 나무 자르기) (0) | 2023.06.04 |
백준 Java 문제풀이 (1874번: 스택 수열) (0) | 2023.06.02 |
백준 Java 문제풀이 (11866번: 요세푸스 문제 0) (0) | 2023.06.01 |
백준 Java 문제풀이 (10816번: 숫자카드2) (0) | 2023.05.31 |