조금씩 꾸준히 완성을 향해

[Algorithm] 백준 11650 좌표 정렬하기 with Python 본문

DataStructure & Algorithm/문제풀이

[Algorithm] 백준 11650 좌표 정렬하기 with Python

all_sound 2022. 10. 6. 12:43

문제

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

입력

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

출력

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

예제 입력 1 복사

5
3 4
1 1
1 -1
2 2
3 3

예제 출력 1 복사

1 -1
1 1
2 2
3 3
3 4

 


내가 짠 코드

import sys 
input = sys.stdin.readline

n = int(input())
li = []
for _ in range(n):
    t = tuple(map(int, input().split()))  # 입력값을 튜플로 저장
    li.append(t)  # 튜플을 리스트에 삽입
li.sort()  # 리스트 정렬                 
for i in li:
    print(i[0], i[1])  # 리스트 안의 튜플값 출력

 

x, y좌표는 (x, y) 이렇게 세트로 움직여야 하는 형태이기 때문에 튜플로 받으면 편하겠다는 생각이 가장 먼저 들었다.

x, y의 입력값을 튜플로 받아 리스트에 넣고 sort 함수를 적용시켰다. 그러자 바로 정답이 구현됐다.

리스트 안의 값이 튜플일 때 sorting을 하면, 선행 값이 같은 경우 그 다음 값을 기준으로 자동 정렬을 해주기 때문이다.

마지막으로 정렬된 리스트의 튜플 값들을 x  y 형태로 출력해 주면 완성이다!

 

 

 

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