[Python Silver V 2751]
https://www.acmicpc.net/problem/2751
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
입력으로 1,000,000개 이하의 단어 및 1,000,000보다 작은 값이 입력되고 중복되지 않습니다.
간단하게 정렬해서 출력하면 되는 부분인데.
시간제한 때문에 여러 방면으로 많이 시도했었습니다....
처음은 그냥 for 문을 사용하여 input으로 숫자를 리스트에 넣고 sort로 정렬하였으나 시간초과
sort 함수 말고 다를 정열 함수를 만들어서 사용해봤지만 다 시간초과였습니다.
그래서 다른 방법을 찾아보던 중에. 파이썬 에서 입력받는 방법이 input() 이랑 sys.stdin.readline()이 있는데.
input()이 sys.stdin.readline() 에 비해서 느린걸 알게 돼서 이번엔 input() 대신 sys.stdin.readline() 를 사용해서 정렬해 보니 성공했습니다.
[ 1 ] sys.stdin.readline() 을 사용하기 위해 Sys를 import 해줍니다.
[ 3 ] for 문을 사용하여 0부터 첫 입력하는 숫자만큼 반복할 수 있게 해줍니다.
[ 4 ] numbers 리스트에 입력되는 숫자를 추가합니다.
[ 5 ] for 문이 종료되고 numbers를 sort로 정렬합니다.
[ 6 ~ 7 ] for 문을 사용해서 numbers 리스트를 하나씩 출력해줍니다.
같은 정렬 방법인데 입력 방법만 달라져도 시간 테스트를 통과한다는 점을 알게 되었네요.
//
input()은 인자로 주어진 문자를 화면에 출력 및 입력을 기다리고, 입력하면 그에 대응하는 데이터가 하나씩 버퍼에 들어감 개행 문자는 입력 종료.
sys.stdin.readlin()은 화면에 출력하는 기능이 없고 한 번에 읽을 수 있는 글 자수 크기에 대한 매개변수 제공, 한 번에 읽어와 버퍼에 저장하기 때문에 입력이 많을 때 input처럼 하나씩 저장하지 않고 한 번에 불러와서 빠르다.