Development/Python

[Python] input함수 대신 sys.stdin.readline 활용하기

Klay_J 2022. 12. 30. 14:29

안녕하세요. 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())

자세한 설명은 이 포스팅 참고 부탁드립니다.

https://hyem5019.tistory.com/entry/Python-input-%ED%95%A8%EC%88%98-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9B%90%ED%95%98%EB%8A%94-%EB%A7%8C%ED%81%BC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%82%B4-%EC%9B%90%EC%86%8C-%EC%9E%90%EB%8F%99%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

 

[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 메서드를 써야할 때

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

2. sys.stdin.readline을 써야할 때

  • 기본적으로 띄어쓰기가 된 채로 2차원 그래프를 입력받을 때.

감사합니다.