input과 sys.stdin.readline의 차이점
input은 입력받은 값의 개행(줄바꿈) 문자를 삭제시켜 받아옵니다.
개행 문자를 삭제시킨다는 것은 줄바꿈을 없앤다는 겁니다. 원래 문자열에서 어떤 작업을 취했으니 속도가 느려졌겠죠?
하지만 sys.stdin.readline은 개행 문자를 포함한 값을 받아옵니다. 그러면 input에 비해 속도가 어느정도는 늦어지지 않을 겁니다. 그리고 줄바꿈을 한 정보를 입력받을 때에도 유용합니다.
빠르게 정보를 받아오기 위해서는 sys.stdin.readline을 사용하면 좋습니다.
그래서 알고리즘에서 사용하겠죠? 제한된 자원안에서 목적을 빨리 수행하는 게 알고리즘이니까요.
input은 매개변수로 문자열(String)을 받아, Console에 출력합니다.
Console에 출력을 한다는 것은 문자열을 입력받는 일 외에 하나 더 있다는 것을 알 수 있습니다.
그러면 첫번째 차이점과 같이 속도가 어느 정도는 늦어지겠죠?
하지만 Console에 출력을 해야할 때에는 input을 사용합니다.
💡 속도가 중요한 문제, 특히 알고리즘 문제 같은 경우에서 sys.stdin.readline을 사용합니다.
sys.stdin.readline 사용법
Code
import sys
a = sys.stdin.readline()
input과 sys.stdin.readline의 차이점'에서 설명했듯이 sys.stdin.readline은 개행 문자를 입력받습니다.
그래서 여러줄을 입력받을 수 있기 때문에 ^z를 사용하면 입력받기를 종료해줍니다.
여기서 개행 문자를 삭제하기 위해서 2가지 방식을 사용합니다.
- type을 int(정수형)로 바꿔서 '\n' 같은 개행 문자를 받지 못하도록 하기
- 개행 문자를 제거해주는 함수 사용하기 (Ex. strip)
Code - type을 정수형으로 변경
import sys
a = int(sys.stdin.readline())
Code - 개행 문자를 제거하는 함수 이용
import sys
a = sys.stdin.readline().strip()
💡 개행 문자가 필요 없다면 위와 같은 방식을 사용해서 sys.stdin.readline를 사용합니다.
sys.stdin.readline로 원하는 만큼만 입력받기
^z를 사용하지 않고 원하는 만큼만 sys.stdin.readline를 사용하여 입력받고 싶다면
처음에 input으로 원하는 줄을 지정해주셔서 for문으로 sys.stdin.readline을 반복해주시면 됩니다.
Code
import sys
l = int(input()) # sys.stdin.readline 사용할 횟수
for i in range(l):
a = sys.stdin.readline()
💡 input에도 적용할 수 있습니다.
하지만 input은 input을 여러 번 해야 한다면 적용을 하는 게 올바르지,
그냥 2~3 줄을 input으로 받는 코드에서 적용을 하게 된다면 코드 보기가 힘듭니다.
참고로 그런 상황이라면 sys.stdin.readline 사용하는게 효율이 좋습니다.
시간을 줄일 수 있기 때문입니다.
sys.stdin.readline로 한 줄에 여러가지 정수 입력받기
1 2 3 11 22 33
한 줄에 위와 같이 여러 가지 숫자를 받아야 한다면 아래 코드와 같이 사용해주시면 됩니다.
Code
import sys
a = int(sys.stdin.readline().split()) # int, split 함수 추가