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
<코드 1 - 파이썬 리스트 정렬 이용>
- 입력을 받을 때 sys.stdin.readline을 사용하지 않아도 시간초과 없이 해결 됐다 (4524ms)
- sys.stdin.readline을 사용했을 때는 (412ms)
- 파이썬 내장 함수 사용하면 되기 때문에 간단했다.
n = int(input())
nums = []
#좌표 입력 받기
for _ in range(n):
nums.append(list(map(int, input().split())))
# 정렬
nums = sorted(nums, key = lambda x:(x[0],x[1]))
#출력
for n in nums:
print(n[0], n[1])
<코드 2 - heapq 이용>
- 입력을 받을 때 sys.stdin.readline을 사용하지 않으면 시간초과,,,
- sys.stdin.readline을 사용하니까 시간이 404ms가 나왔다.
- 입력을 받으면서 힙에 넣어주고, 입력이 끝나면 다시 하나씩 빼면서 프린트한다.
- heapq는 최소힙이 디폴트이기 때문에 따로 지정해야하는 것은 없었다.
import heapq
import sys
input = sys.stdin.readline
n = int(input())
h = [] #힙
#입력을 받고, 힙에 넣어줌
for i in range(n):
x,y = map(int, input().split())
heapq.heappush(h,(x,y))
#하나씩 뽑으면서 출력
for _ in range(n):
x,y = heapq.heappop(h)
print(x, y)
'알고리즘 > 정렬' 카테고리의 다른 글
[백준 -실버5] 10989번 수 정렬하기 3(정렬, 파이썬) (0) | 2022.02.05 |
---|---|
[백준 -실버5] 11651번 좌표 정렬하기2(정렬, 2차원 리스트 정렬, 파이썬) (0) | 2022.02.05 |
[백준 -실버2] 18870번 좌표 압축(정렬, 파이썬) (0) | 2022.02.05 |
[프로그래머스 - Level 2] 가장 큰 수(정렬, 파이썬) (0) | 2022.01.24 |
[백준-실버5] 1181번 단어 정렬(파이썬) (0) | 2022.01.20 |