본문 바로가기
파이썬 팁

파이썬 입력 빠르게 받기

by 다빈치코딩 2023. 9. 8.

목차

    반응형

    백준 문제를 풀다보면 입력이 많아서 시간초과가 발생하는 경우가 종종 있습니다. 이때 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을 손쉽게 사용하시기 바랍니다.

    반응형