[Python] input함수 대신 sys.stdin.readline 활용하기
안녕하세요. Harry입니다.
본 포스팅의 목적은, 코딩테스트를 준비함에 있어 스스로 공부한 지식을 정리하고자 합니다.
이번에 배운 내용은 사용자 입력함수로 input() 대신 sys.stdin.readline을 입력하여 사용자 입력을 받는다는 것입니다.
1) 왜 input함수를 안쓰고 이걸 쓰냐?
input()함수의 경우, 입력 받을 때 매우 느려 10만개 이상 입력받을 경우 시간 초과 문제가 발생합니다.
input()은
- 사용자에게 입력을 받은 후
- 받은 입력을 문자열로 전환하고
- strip (공백제거) 까지 진행하기 때문에 비교적 오래 걸리는 함수입니다.
2) sys.stdin.readline 은??
개행 문자까지 포함하여(즉, 한줄 전체를) 출력하기 때문에 따로 strip 과정이 없습니다. 그렇기 때문에 input함수 보다 비교적 빠르게 출력할 수 있습니다.
3) 사용방법
기본
아래와 같은 경우, a\n 값이 저장됩니다.
import sys
input = sys.stdin.readline
정수 1개를 입력 받을 경우
아래와 같이 받는다면, 하나의 정수를 받을 수 있습니다.
import sys
a = int(sys.stdin.readline())
여러개의 정수를 받는 경우
map 함수 및 split 메서드를 이용하는 것은 Input을 활용할때와 동일합니다.
import sys
input = sys.stdin.readline
a,b,c = map(int,input().split())
자세한 설명은 이 포스팅 참고 부탁드립니다.
[Python] input 함수 활용하여 원하는 만큼 리스트 내 원소 자동생성하기
안녕하세요. Harry입니다. 본 포스팅의 목적은, 코딩테스트를 준비함에 있어 스스로 공부한 지식을 정리하고자 합니다. 코딩테스트를 준비하다보면, 반복문이 1번 돌때마다 나온 값을 한 리스트
hyem5019.tistory.com
여러개의 정수를 입력받아 리스트로 저장하는 경우
역시 input 함수와 동일합니다.
import sys
input = sys.stdin.readline
graph = list(map(int,input().split()))
여러개의 정수를 여러 줄 입력받아 2차원 리스트로 저장하는 경우
import sys
#임의 리스트 생성
input = sys.stdin.readline
graph = [list(map(int,input().split())) for i in range(4)]
(23.2.9 추가)
1. Input 메서드를 써야할 때
- 2차원 그래프 입력받을 때 숫자를 붙여서 입력하는 경우.(아래는 예시 문제입니다.)
https://www.acmicpc.net/problem/2178
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
2. sys.stdin.readline을 써야할 때
- 기본적으로 띄어쓰기가 된 채로 2차원 그래프를 입력받을 때.
감사합니다.