문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
import sys
n = int(sys.stdin.readline())
arr = [0] * 10000 # 수의 최댓값만큼 배열 생성
for _ in range(n):
arr[int(sys.stdin.readline())-1] += 1
for i in range(10000):
if arr[i]:
for _ in range(arr[i]):
print(i+1)
처음에는 수를 다 배열에 저장하고 정렬을 한 후, 오름차순으로 출력하는 코드로 작성했다. 하지만 배열에 모두 저장하는 빙식은 메모리 초과로 실패했다.
두번째로 숫자:숫자가 입력된 횟수 로 딕셔너리를 만들었다. 하지만 이 방법 또한 숫자를 정렬해야 하므로 시간 초과로 실패했다.
질문 게시판 등을 활용한 결과, 입력을 input()이 아닌 sys.stdin.readline() 이용하고 배열의 인덱스를 활용하여 통과했다.