본문 바로가기

개발/파이썬

파이썬 기본 문법 - sys.stdin.readline

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.

 

Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.

또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.

 

rstrip을 하라는 건 문자열 자체를 변수에 저장하고 싶을 때 얘기지, 개행문자가 맨 끝에 들어와도 int 변환이나 split()을 그대로 할 수 있습니다. 즉 int(sys.stdin.readline()), sys.stdin.readline().split() 이렇게 해도 아무 문제 없습니다. 참고로 이름이 꽤 길기 때문에 저는 input = sys.stdin.readline을 맨 처음에 함으로써 쓰는 편입니다.

 

출처 : https://www.acmicpc.net/problem/15552

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

백준 문제를 풀다가 발견한 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

 

[Python 문법] 파이썬 입력 받기(sys.stdin.readline)

파이썬으로 코딩 테스트를 준비한다면, 반드시 알아야 할 입력방식인 sys.stdin.readline()에 대한 정리 입니다.

velog.io


백준 10950번과 15552번의 차이를 통해 한 번 확인해보자.

 

10950.

a=int(input())
list=[]

for i in range(1,a+1):
b,c = map(int,input().split())
list.append(b+c)

for i in list:
print(i)

 
15552.

import sys

a=int(input())
list=[]

for i in range(1,a+1):
b,c = map(int,sys.stdin.readline().split())
list.append(b+c)

for i in list:
print(i)