문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제
나의 풀이 1
N = int(input())
num_list = []
for _ in range(N):
num_list.append(int(input()))
num_list.sort()
for i in num_list:
print(i)
- 처음엔 정석적인 풀이를 작성했는데 시간 초과로 실패했다.
나의 풀이 2
import sys
N = int(sys.stdin.readline())
num_list = []
for _ in range(N):
num_list.append(int(sys.stdin.readline()))
num_list.sort()
for i in num_list:
print(i)
- `input()`이 아닌 `sys.stdin.readline()`을 사용했다.
- `input()`은 입력받은 값을 처리하기 전에 문자열 처리를 포함한 추가 작업을 수행하기 때문에 `sys.stdin.readline()`에 비해 속도가 느리다.
- 입력값의 조건이 `1 ≤ N ≤ 1,000,000`이기 때문에 대량의 데이터 처리를 위해 `sys.stdin.readline()`을 사용하는 것이 좋다.
다른 사람의 풀이
print(*num_list, sep='\n')
- 리스트의 요소를 한 줄씩 출력할 때 for문이 아닌 언패킹 연산자 `*`를 사용할 수도 있다.
- 언패킹 연산자로 리스트의 요소를 출력하는데, 구분자로 개항 문자를 삽입한다.
lst = [1, 2, 3]
print(*lst) # Output: 1 2 3
- 언패킹 연산자는 리스트나 튜플 같은 iterable 객체를 개별 인자로 전달받아 리스트의 모든 요소를 출력한다.
- 아래가 for문 적용, 위가 언패킹 연산자를 적용한 결과다. 언패킹 연산자를 사용한 풀이의 속도가 16ms 더 빠르다.