수 정렬하기3

09009·2022년 12월 31일
0

정렬

목록 보기
1/5

문제 보기

시간 제한메모리 제한
5 초 (하단 참고)8 MB (하단 참고)

시간 제한

Java 8: 3 초
Java 8 (OpenJDK): 3 초
Java 11: 3 초
Kotlin (JVM): 3 초
Java 15: 3 초

메모리 제한

Java 8: 512 MB
Java 8 (OpenJDK): 512 MB
Java 11: 512 MB
Kotlin (JVM): 512 MB
Java 15: 512 MB


문제

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


- 문제 해결

  • for문에서 list에 append를 하게 되면 메모리 재할당이 이루어진다.
    -> 즉 메모리를 효율적으로 이용하지 못함.
  • 문제에서 입력하는 수가 10000까지 주어질 수 있기 때문에 각 요소가 0인, 10000개 만큼의 리스트를 생성한다.
    • index는 0부터 세므로 길이가 10001인 리스트를 생성한다.
  • 값을 입력할 때마다 그 입력값과 같은 index에 1씩 더해주면 된다.

✍ 소스 코드

import sys
input = sys.stdin.readline

n = int(input())
array = [0] * 10001 # 주어진 수는 10,000보다 작거나 같은 자연수이므로

for _ in range(n):
    array[int(input())] += 1

for i in range(10001):
    if array[i] != 0:
        for j in range(array[i]):
            print(i)

0개의 댓글