ROKO

[Python] input() vs sys.stdin.readline() 본문

Develop

[Python] input() vs sys.stdin.readline()

RO_KO 2023. 3. 1. 23:42
728x90

baekjun이나 google의 코딩테스트 사이트인 hackearth에서 나는 주로 python을 이용했다. 

물론 코딩테스트 관점에서 좋은 언어 선택은 아니다. (모든 언어를 다룰 수 있다는 전제하에)

 

Why?

  • python은 생산성과 다양한 기능을 하는대신 최적화에는 알맞지 않다.
    • C++, C가 최고
  • python은 다양한 역할군에 쓰이지 않는 언어이다.
    • 물론 요기요도 일부 python구현이 있다고는 하나 한국은 java기반의 언어가 대부분이다.
    • python은 대체로 AI 분야에서 사용되는 언어이다. (본인은 AI의 길을 걷고자 하기에...)

따라서 복잡하고 세밀한 설계가 필요한 알고리즘 문제일 경우 input()을 사용함에 따라 시간 초과가 생길수도 있는데, 이를 해결하기 위해 

import sys

input = sys.stdin.readline()

위 코드를 입력코드로 많이 사용한다. 그렇다면 둘의 차이점이 무엇일까?

 

python의 언어의 역사를 나열하며 알아보자.


Python 2.x

2.x 버전에는 입력 함수가 2가지 존재하는데

data1 = input()
data2 = raw_input()

input()은 입력 type에 따라 evaluation하여 적절한 자료형으로 변환하여 저장하고 raw_input()은 입력값을 어떤 자료형으로 받아야하는지 고려하지 않고 무조건 string으로 입력받는다. 이때 input()에 string입력시 ""를 사용하지 않으면 선언된 변수명으로 생각하여 오류가 날 수도 있다.


Python 3.x

raw_input()이 사라지게 되고 기존에 있던 input()이 역할을 대신하게 되었다. 또한 3.x 버전부터 객체지향 프로그래밍으로 모든 변수를 객체화하여 type이 아닌 class로 구성되게 되었다.

 

추가적으로 input()은 parameter로 prompt message를 받을 수 있다. 그리고 자체적으로 rstrip() 과정이 내포되어 있어 개행문자를 구분하여 input을 받게 된다.

# prompt 출력값 입력 가능
data = input("값을 입력하세요 : ")

반대로 sys.stdin.readline()은 prompt를 parameter로 받지 않으니 실행시간이 빠르지만 rstrip()과정 없이 개행문자를 그대로 받아들여 필요에 따라 rstrip()코드를 작성해야 한다.

과정을 설명하면 sys.stdin이 buffer에 모든 입력값을 받고 readline()으로 한줄씩 읽어올때 rstrip()을 통해 전처리한다.
import sys

data = sys.stdin.readline().rstrip()

 

 

결론적으로 input() 함수가 추가적으로 실행하는 과정이 제공하는 기능이 많아 반복적인 입력이나 자주 호출이 되는 경우 시간의 차이가 생길 수 밖에 없다. 사실 코딩만 할줄 안다면 최적화는 c언어가 최고..


언어별 입출력 시간을 나타낸 결과물이 있으니 참고하도록 하자.

https://www.acmicpc.net/blog/view/56

 

입력 속도 비교

여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일

www.acmicpc.net

 

728x90

'Develop' 카테고리의 다른 글

[Python] list slicing replace  (0) 2023.03.05
[Python] LIST.sort() vs sorted(LIST)  (0) 2023.03.02
Numpy array 생략없이 출력  (0) 2023.02.27
IT 정보습득에 도움되는 website  (0) 2023.02.26
Comments