문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
- 입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
- 출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
- 예제 입력 1
10 5 2 3 1 4 2 3 5 1 7
- 예제 출력 1
1 1 2 2 3 3 4 5 5 7
- 첫번째 시도
n = int(input()) sortList = [] for _ in range(n): a = int(input()) sortList.append(a) sortList.sort() for i in sortList: print(i)
- 정답
import sys n = int(input()) #입력받는 수의 개수 n n_list = [0] * 10001 # 리스트크기 <= 10000 for i in range(n): n_list[int(sys.stdin.readline())] += 1 for i in range(10001): if n_list[i] != 0: for j in range(n_list[i]): print(i)
- 설명
문제에서 메모리 제한을 8Mb 밖에 안줘서 일반적으로 풀면 메모리 초과가 난다. 문제에서 주어진 10,000까지 리스트를 만듭니다. 인덱스는 0부터 세기 때문에 10,001까지 만들고 리스트에 각 요소마다 0을 할당해두고 입력값을 받을 때마다 1을 더해줍니다. 그리고 입력을 다 받고나면 0보다 큰 요소를 갖는 인덱스를 찾아서 그 수만큼 인덱스를 출력해주면 된다.