[Python 문법]파이썬 입력받는 방법 Python sys.stdin과 sys.stdin.readline

Ju Young Jun·2022년 4월 23일
0

❗ 백준을 풀다보면 반복문으로 여러줄을 입력 받아야 할 떄는 input()으로 입력을 받는다면 시간초과가 발생할 수 있다.

import sys

T = int(input)
for i in range(T):
	a,b = map(int, sys.stdin.readline().split())
    print(a+b)

반복문으로 여러줄을 입력받는 상황에서는 반드시 sys.stdin.readline()을 사용해야 시간초과가 발생하지 않는다.

💡 sys.stdin.readline() 사용법

🧨한 개의 정수를 입력 받을 때

import sys
a = int(sys.stdin.readline())

sys.stdin.readline()은 한줄 단위로 입력받기 떄문에, 개행문자가 같이 입력받아진다.
만약2를 입력했다면, 2\n가 저장되기 떄문에, 개행문자를 제거해야 한다 !
또한, 변수 타입이 문자열 형태(str)로 저장되기 떄문에, 정수로 사용하기 위해서 형변환을 거쳐야 한다.

🧨정해진 개수의 정수를 한줄에 입력받을 때

import sys
a, b, c = map(int, sys.stdin.readline().split())

map()은 반복 가능한 객체(리스트 등)에 대해 각각의 요소들을 지정된 함수로 처리해주는 함수이다.
위와 같이 사용한다면 a,b,c에 대해 각각 int형으로 형변환 할 수 있다.

🧨임의의 개수의 정수를 한줄에 입력받아 리스트에 저장할 때

import sys
data = list(map(int, sys.stdin.readline().split()))

split()은 문자열을 나눠주는 함수다.
괄호 안에 특정 값으 넣어주면 그 값을 기준으로 문자열을 나누고, 아무 값도 넣어주지 않으면 공백(스페이스, 탭, 엔터 등)을 기준으로 나눈다.
map()은 맵 객체를 만들기 떄문에, 리스트형으로 바꿔주기 위해서 list()로 감싸주었다.

🧨임의의 개수의 정수를 n줄 입력받아 2차원 리스트에 저장할 떄

import sys
data = []
n = int(sys.stdin.readline())
for i in range(n):
	data.append(list(map(int, sys.stdin.readline().split())))

이렇게 한다면 각 요소의 길이가 동일한 2차원 리스트도 만들 수 있고, 각각 길이가 다른 2차원 리스트도 입력 받을 수 있다.

🧨문자열 n줄을 입력받아 리스트에 저장할 떄

import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]

strip()은 문자열 맨 앞과 맨 끝의 공백문자를 제거한다.

🧨여러줄 입력 받은 값 저장하기

import sys
li =[]
for line in sys.stdin:
    li.append(tuple(map(int, line.strip().split())))

sys.stdin은 ^Z를 입력받으면 종료해주기 떄문에 여러 줄을 입력받아야 하는 문제에서 유용하다.

sys.stdinsys.stdin.readline() 요약

sys.stdin.readline()은 입력한 한 라인 을 iterable한 컨테이너에 저장한다. 띄어쓰기아 \n까지 포함하므로 split()을 이용하는 것이 좋다. 만약 여러 줄 을 입력받고 싶으면 sys.stdin을 이용하자

profile
안녕하세요 :)

0개의 댓글