[Python] Baekjoon 백준 2751번 수 정렬하기 2
[Python] Baekjoon 백준 2751번 수 정렬하기 2
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
import sys
n = int(input())
num = []
for _ in range(n):
num.append(int(sys.stdin.readline()))
num.sort()
for i in num:
print(i)
2750번 문제랑 비슷하길레 그냥 했다가 시간초과...
차이가 "N(1 ≤ N ≤ 1,000,000)" 이라고 써있다
input() 으로 몇개 받는건 상관 없지만
예제의 최대값 1,000,000 이정도 까지 받게 되면 시간이 오래걸린다
( 특히 반복문 안에서의 input() )
그래서
import sys
sys.stdin.readline()
사용하여 해결
input() 이 sys.stdin.readline() 보다 느린 이유 :
input() 내장 함수는 sys.stdin.readline()과 비교해서 prompt message를 출력하고,
개행 문자를 삭제한 값을 리턴하기 때문에 느리다.
input() 과 sys.stdin.readline() 의 차이점 :
일단 sys.stdin.readline()과 input()은 같은 역할을 하지 않는다.
input() 내장 함수는 parameter로 prompt message를 받을 수 있다
따라서 입력받기 전 prompt message를 출력해야 한다
물론 prompt message가 없는 경우도 있지만, 이 경우도 약간의 부하로 작용할 수 있다
하지만, sys.stdin.readline()은 prompt message를 인수로 받지 않는다.
또한, input() 내장 함수는 입력받은 값의 개행 문자를 삭제시켜서 리턴한다
즉 입력받은 문자열에 rstrip() 함수를 적용시켜서 리턴한다
반면에 sys.stdin.readline()은 개행 문자를 포함한 값을 리턴한다. 이 때문에 조금 귀찮은 점이 있기도 하다.
참고)
Input vs. sys.stdin.readline 차이점?
https://buyandpray.tistory.com/7
파이썬 입력 받기(sys.stdin.readline)