Algorithm/Baekjoon

[Python] Baekjoon 백준 2751번 수 정렬하기 2

Lute3r 2021. 9. 3. 00:18

[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)

https://velog.io/@yeseolee/Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5-%EC%A0%95%EB%A6%ACsys.stdin.readline

 

반응형