minzzl

꿀팁 / sys.stdin.readline() / 시간 초과를 대비하는 빠른 입력받기 본문

Algorithm/기타 공부

꿀팁 / sys.stdin.readline() / 시간 초과를 대비하는 빠른 입력받기

minzzl 2022. 12. 1. 10:25
728x90
반응형

단순히 몇줄을 입력받는 경우에는 input() 을 사용하면 됩니다.

그러나 연속적으로 여러줄을 입력을 받아야하는 경우는 다릅니다. 시간 초과가 발생할 수 있기 때문입니다.

따라서 최대한 빠르게 입력을 받아야만 합니다.

그 때 사용하는 것이 sys 라이브러리에 정의되어있는 sys.stdin.readline() 입니다.

 

사실 기존에는 input() 만으로 문제를 푸는데 딱히 지장이 없었습니다만, 백준의 2751 문제를 접한 후 빠른 입력을 통해 시간 초과 문제를 해결해야만 했습니다..

 

sys.stdin.readline() 사용법

 

 input()보다는 sys.stdin.readline()를 사용하면 더 빠른 입력이 가능합니다.

아래의 다양한 예제들로 익혀봅시다.

 

한 개의 정수를 입력 받는 경우

 

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

 

정해진 개수의 정수를 한 줄에 입력 받는 경우

 

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

 

임의의 개수의 정수를 한 줄에 입력받아 리스트에 저장하는 경우

 

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

 

임의의 개수의 정수를 n줄 입력 받아 2차원 리스트에 저장하는 경우

 

import sys

n = int(sys.stdin.readline()) #입력 받을 데이터 개수

for i in range(n):
	arr.append( list(map( int, sys.stdin.readline().split() )))

 

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

 

import sys

n = int(sys.stdin.readline()) #입력 줄의 개수

arr = [sys.std.readline().strip() for i in range(n)]

 

lstrip(), strip(), rstrip() 사용법 및 차이점

 

공백 제거

아래의 코드는 strip()에 인자를 전달하지 않습니다. 인자를 전달하지 않으면 문자열에서 공백을 제거해줍니다.

 

rstrip() -> 오른쪽 공백 제거

 lstrip() -> 왼쪽 공백 제거

strip() -> 오른쪽, 왼쪽 공백 제거

 

[입력]

text = ' Water boils at 100 degrees '
print('[' + text.rstrip() + ']')
print('[' + text.lstrip() + ']')
print('[' + text.strip() + ']')

 

[출력]

[ Water boils at 100 degrees]
[Water boils at 100 degrees ]
[Water boils at 100 degrees]

 

동일한 문자 제거

인자로 문자 1개를 전달하면 그 문자와 동일한 것을 모두 제거합니다.

동일하지 않은 문자가 나올 때까지 제거합니다.

 

[입력]

text = '0000000Water boils at 100 degrees 000'
print(text.lstrip('0'))
print(text.rstrip('0'))
print(text.strip('0'))

 

[출력]

Water boils at 100 degrees 000
0000000Water boils at 100 degrees
Water boils at 100 degrees

 

여러 문자 제거

인자로 여러 문자를 전달하면 그 문자들과 동일한 것들을 모두 제거합니다.

동일하지 않은 문자가 나올 때 까지 제거합니다.

 

[입력]

text = ",,,,,123.....water....pp"
print(text.lstrip(',123.p'))
print(text.rstrip(',123.p'))
print(text.strip(',123.p'))

 

[출력]

water....pp
,,,,,123.....water
water

 

* 다음의 글을 참고하여 작성하였습니다.

 

https://mgyo.tistory.com/166

728x90
반응형