파이썬3에서 입력받는 방법은 두 가지가 있다.
첫 번째는 가장 흔히 쓰이는 input()을 이용하는 것이다. 간단하게 알아보자.
# 정수를 입력받고 싶을 때
N = int(input())
# 두 개의 정수를 입력받고 싶을 때
a, b = int(input().split())
# map함수를 이용하여 정수형태로 입력 받아 list에 저장
A, B = list(map(int, input().split()))
위와 같은 방법처럼 하나의 정수를 입력받을 수도 있고 여러 개의 정수를 입력받는 방법이 있다. 하지만 이러한 방법만 있는 것이 아니라는 말을 듣고 그에 대해 알아보려 한다.
새롭게 알게 된 방법은 두 번째로 sys.stdin.readline()을 이용하는 방법이다. 이 방식을 이용하기 위해서는 코드 첫 줄에 import sys 코드를 통해 모듈을 가져와야 한다.
# 모듈 가져오기
import sys
# 한 개의 정수 입력받기
N = int(sys.stdin.readline())
# 두 개 이상의 정수 입력받기
a, b = map(int, sys.stdin.readline().split())
두 개의 방법이 있다는 것은 이렇게 알아봤다. 그런데 과연 이 두 방법의 차이는 무엇이고 언제 사용하면 좋은 것 일까?
영어를 잘 못 하긴 하지만 번역기의 힘을 빌려 이해해본 대로 적어보려 한다.
input([prompt])
- prompt 인자가 있으면 새 개행 없이 표준 출력에 기록되고 함수는 입력으로부터 줄을 읽고 문자열로 변환한 다음 반환
- 즉, 입력을 받고 문자열로 변환한 뒤 strip 과정 3단계를 거치게 되는 것이다.
- 이로 인해 정수값으로 입력을 받으려면 int(input())처럼 강제 형 변환도 거쳐야 한다.
- 더 이상 입력이 없을 경우 EOFError 발생
sys.stdin.readline()
- 인터프리터가 표준 입력에 사용하는 파일 객체
- input() 호출을 포함
- 개행문자 포함 처리 (rstrip(), lstrip() 등을 통해 공백 삭제 가능)
- 처리 속도가 input보다 빠름
- 더 이상 입력이 없을 경우 빈 문자열 반환
공식문서를 참고하여 정리해보았다. 결론적으로 일반적인 알고리즘 문제(백준, 프로그래머스 등)에서는 sys.stdin.readline()을 사용하는 것이 시간 초과로 인한 틀림을 방지할 수 있는 방법이라고 생각한다.
'개인 공부 > 나의 궁금증' 카테고리의 다른 글
[궁금증] 다국적 기업의 임원 직책명 정리 (0) | 2021.06.25 |
---|---|
[Database] SQL vs NoSQL (0) | 2021.06.24 |
[파이썬] python3 vs pypy3 (0) | 2021.04.05 |