N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
import sys
import heapq
input = sys.stdin.readline
n = int(input())
q = list()
for i in range(n):
heapq.heappush(q, int(input()))
for i in range(n):
print(heapq.heappop(q))
import sys
input = sys.stdin.readline
n = int(input())
q = list()
for i in range(n):
q.append(int(input()))
q.sort()
for i in q:
print(i)
import sys
input = sys.stdin.readline
n = int(input())
q = list()
for i in range(n):
q.append(int(input()))
q.sort()
print('\n'.join(map(str, q)))
솔직히 위의 풀이는 좀 바보였다.
heapq 모듈로 정렬하는 방식이 파이썬 내장 sort 함수보다 빠를 거라고 생각했던 내 자신이 약간 부끄러웠다..
파이썬 내장 sort는 무슨 정렬 방식을 사용하길래 왜 이리 빠를까하고 검색해보니 다음 블로그도 나와 같은 의문을 가지고 있었다.
위의 블로그를 보니 Tim이라는 사람이 만든 tim sort를 sort() 메소드에서 사용하고 있고
병합정렬과 삽입정렬을 적절하게 섞어서 시간복잡도가 O(nlogn) 정도라고 한다.
파이썬에서는 sort()를 쓰면 되는데, 자바는 몰라서 공부해봐야겠다.