공부/알고리즘
[단계별로 풀어보기][python 3] 정렬 - 수 정렬하기 3 (10989)
도리암
2022. 4. 30. 19:21
10989번: 수 정렬하기 3 (acmicpc.net)
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
정렬 문제들에서 주의할 점은 시간과 메모리다.
이 문제에서는 메모리가 단 8MB에 시간제한이 5초인 점에 주의해야 한다.
도전 1
def quickSort(li):
if len(li) <= 1: return li
pivot, tail = li[0], li[1:]
left = [i for i in tail if i <= pivot]
right = [i for i in tail if i > pivot]
return quickSort(left) + [pivot] + quickSort(right)
n = int(input())
first = [0]*n
for i in range(n):
first[i] = int(input())
first = quickSort(first)
for i in first:
print(i)
퀵 정렬을 사용해 정렬을 시도했다.
메모리 초과로 실패했다.
도전 2
카운트 정렬을 사용해 메모리를 절약해보려고 시도했다.
n = int(input())
first = [0]*10001
for i in range(n):
first[int(input())] += 1
for i in range(10001):
if first[i] != 0:
for j in range(first[i]):
print(i)
시간 초과로 실패
최종
input() 함수가 조금 느리다는 정보를 접수해서 input() 대신 sys.stdin.readline() 함수를 이용했다.
import sys
n = int(sys.stdin.readline())
first = [0]*10001
for i in range(n):
first[int(sys.stdin.readline())] += 1
for i in range(10001):
if first[i] != 0:
for j in range(first[i]):
print(i)