목차
백준 문제를 풀다보면 입력이 많아서 시간초과가 발생하는 경우가 종종 있습니다. 이때 readline을 사용해서 input의 속도를 빠르게 하는 방법은 많이 알려져 있습니다.
import sys
a = sys.stdin.readline()
이런식으로 기존의 input()을 모두 sys.stdin.readline()으로 바꿔주면 됩니다. 이 방법은 모든 input을 바꿔줘야 하는 귀찮음이 존재합니다. 이럴때 딱 한 번만 readline을 사용하여 모든 input문을 바꿔줄 수 있습니다.
함수를 변수처럼 사용하기
바로 함수를 변수처럼 사용하면 됩니다. 간단한 예를 들어 보겠습니다.
def say_hello():
print("Hello World!")
a = say_hello
a()
Hello World!를 출력해주는 간단한 함수 say_hello를 만들었습니다. 그리고 이 함수를 a라는 변수에 담습니다. 중요한 점은 say_hello 함수 뒤에 괄호가 없다는 것입니다. 이렇게 하면 a라는 변수에 say_hello라는 함수의 포인터가 저장 됩니다. 이제 a라는 변수를 함수처럼 괄호를 붙이면 say_hello함수와 똑같이 동작하게 되는 것입니다. 이렇게 변수에 함수를 저장하는 방식을 사용하면 모든 input문을 바꾸지 않아도 쉽게 사용이 가능합니다.
input 바꾸기
시간초과 발생시 코드 상단에 input을 바꾸는 두 줄만 추가해주면 됩니다.
import sys
input = sys.stdin.readline
arr = map(int, input().split())
이렇게하면 기존의 input이라는 함수의 역할은 사라지고 input이라는 변수에 sys.stdin.readline 함수의 포인터가 저장되게 됩니다. 그리고 input()이 실행될 때 기존 input문이 아니라 readline이 실행되게 되는 것입니다. map(int, input().split()) 과 같은 단순 input이 아니더라도 잘 동작하니 걱정하지 말고 사용하시면 됩니다.
input으로 바꾸지 못하는 경우
input을 readline으로 바꾸지 못하는 경우는 기존 input()문 안에 prompt가 들어가 있는 경우 입니다.
import sys
input = sys.stdin.readline
a = input("숫자를 입력하세요")
기존 input문에 출력되는 항목이 있는 경우 readline으로 바꿀 수 없습니다. 하지만 보통 알고리즘 문제에 input 함수에 prompt가 들어가는 경우가 없으니 문제가 되는 경우는 거의 없을것 입니다.
그럼 이제부터 readline을 손쉽게 사용하시기 바랍니다.
'파이썬 팁' 카테고리의 다른 글
파이썬 문자열에서 공백 or 문자 제거 (0) | 2024.02.04 |
---|---|
for else / while else 사용 방법 (0) | 2023.10.16 |
파이썬 lambda 함수 활용 팁 (2) | 2023.09.14 |
Gradio 기초(Colab에서 사용하기) (0) | 2023.09.11 |