[Python] 파이썬 sys.stdin.readline 구조

권경환·2023년 11월 4일
0

python

목록 보기
2/14

요즘 다시 백준에서 코딩테스트 문제를 풀고 있는데 반복문 문제를 풀기전 주의사항이 적혀있어서 읽어보았다.

for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.

이 주의사항을 못 봤다면 평소대로 input()을 사용했을텐데 sys.stdin.readline 사용을 권장하고 있었다.

그렇다면 sys.stdin.readline을 권장하는 이유가 무엇일까?
궁금해서 공식 문서들을 확인해봤는데 내장함수 input()과 sys.stdin.readline과 3가지 차이점이 있다.

input() 공식문서
sys 공식문서

차이점

1. input()은 아래 사진과 같이 prompt 메시지를 출력할 수 있다. 즉 prompt인자를 받을 수 있지만 sys.stdin.readline은 받을 수 없다.

2. sys.stdin.readline은 개행 문자가 입력 끝에 있으며, input()은 입력받은 값에 개행 문자가 있다면 삭제해서 리턴시킨다.

  • input1은 sys.stdin.readline을 이용해서 출력한 값이고 다음과 같이 안녕? 난 readline이야 다음 개행처리 된 것을 확인할 수 있다.
  • input2는 input()을 이용해서 출력한 값이고 개행처리 된 것이 없는것을 확인 할 수 있다.

input()은 개행제거를 하고 다시 출력하는 구조로 인해 속도저하로 이어진다.

3. input()은 내장함수이지만 sys.stdin은 파일 객체이다.

  • input()은 내장함수로 입력된 값을 읽고 문자열로 변환하여 개행문자를 지우고 값을 반환하는 총 4번의 과정이 필요한 구조이다.
  • sys.stdin은 입력할시 파일객체로 취급이 되고 readline 함수로 파일의 첫번째 줄만 반환해주는 총 2번의 과정이 필요한 구조이다.

결론

이런 차이점들로 인해 반복해서 출력해야하는 경우 시간 초과를 피하고 더 빠르게 처리하기 위해서는 sys.stdin.readline을 권장하는 것이였다!

profile
성장을 좋아하는 주니어 개발자의 블로그

0개의 댓글