코딩테스트/백준

[백준 11650] 좌표 정렬하기

starcat37 2023. 4. 2. 15:17

1. 링크

https://www.acmicpc.net/problem/11650

2. 문제 설명

1) 문제

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

 

2) 입력

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

 

3) 출력

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

 

3. 코드

#11650

#입력받기
coordinates = []
for i in range(int(input())):
    x, y = map(int, input().split())
    coordinates.append([x, y])

#정렬해서 출력하기
coordinates.sort()
for j in coordinates:
    print(j[0], j[1])
    
#sorted()는 시간초과, .sort()는 통과

4. 설명

우선 주어진 입력들을 받는다. N은 곧바로 int(input())으로 받고, 먼저 선언한 coordinates 리스트에 주어진 좌표를 이중 리스트 형태로 append 해준다.

그 후 sort() 메서드를 적용한 후, 출력 포맷에 맞게 이중 리스트 안의 x, y 좌표를 0, 1 인덱스를 통해 출력하면 끝이다.

5. 배운 점

C++이나 Java 등 다른 언어였으면 분명 이것보다는 복잡하게 짰을텐데... 파이썬에서는 어이 없을 정도로 아무 생각 없이 써낸 코드가 통과를 받았다.

다만 첫 코드에서는 sort() 메서드 대신 sorted() 함수를 사용했는데, 이 때 시간초과가 발생하였다. 처음에는 sort()와 sorted()의 시간 복잡도가 달라서 그런 줄 알았는데, 이상하게 검색을 해봐도 둘다 Timsort 기반에 O(nlogn)이었다. 좀 더 서치해보고 보충해야겠다:(

'코딩테스트 > 백준' 카테고리의 다른 글

[백준 9012] 괄호  (0) 2023.04.30
[백준 10845, 10828, 10866] 큐, 스택, 덱  (0) 2023.04.24
[백준 1929] 소수 구하기  (0) 2023.04.09
[백준 1436] 영화감독 숌  (0) 2023.04.08
[백준 11659] 구간 합 구하기 4  (0) 2023.03.31