871 words
4 minutes
sys 를 통한 빠른 입출력

안녕하세요, 여러분! 오늘은 Python에서 입력을 빠르게 받는 방법인 sys.stdin.readline()에 대해 알아보겠습니다. 알고리즘 문제를 풀 때 입력 처리는 매우 중요한데요, 특히 대량의 데이터를 다룰 때는 더욱 그렇습니다.

먼저, sys.stdin.readline()이 무엇인지 간단히 설명드리겠습니다. 이 함수는 Python의 sys 모듈에 포함된 것으로, 표준 입력에서 한 줄을 읽어오는 역할을 합니다. 일반적으로 사용하는 input() 함수보다 훨씬 빠르게 동작하기 때문에, 많은 양의 입력을 처리해야 하는 알고리즘 문제에서 자주 사용됩니다.

그럼 어떻게 사용하는지 자세히 알아볼까요?

우선, sys 모듈을 불러와야 합니다. 코드 맨 앞에 다음과 같이 작성해주세요

import sys

이제 입력을 받을 때 input() 대신 sys.stdin.readline()을 사용할 수 있습니다. 예를 들어, 정수 하나를 입력받고 싶다면 다음과 같이 작성할 수 있습니다

n = int(sys.stdin.readline())

여기서 주의할 점이 있습니다. sys.stdin.readline()은 입력의 끝에 줄바꿈 문자(‘\n’)까지 같이 읽어옵니다. 따라서 문자열을 입력받을 때는 이 점을 고려해야 합니다. 예를 들어, 문자열을 입력받을 때는 다음과 같이 할 수 있습니다

s = sys.stdin.readline().strip()

.strip() 메서드를 사용하면 문자열 양 끝의 공백과 줄바꿈 문자를 제거할 수 있습니다.

여러 줄의 입력을 받아야 할 때는 어떻게 해야 할까요? 예를 들어, N개의 정수를 입력받아 리스트에 저장하고 싶다면 다음과 같이 할 수 있습니다

N = int(sys.stdin.readline())
numbers = [int(sys.stdin.readline()) for _ in range(N)]

이렇게 하면 N개의 정수를 입력받아 numbers 리스트에 저장할 수 있습니다.

sys.stdin.readline()을 사용하면 입력 처리 속도가 크게 향상되지만, 가독성은 조금 떨어질 수 있습니다. 따라서 실제 문제를 풀 때는 입력의 크기와 시간 제한을 고려하여 input()sys.stdin.readline() 중 적절한 것을 선택하시면 됩니다.

마지막으로, sys.stdin.readline()을 자주 사용한다면 매번 긴 함수명을 쓰는 것이 번거로울 수 있습니다. 이런 경우에는 다음과 같이 별칭을 지정해 사용할 수 있습니다

import sys
input = sys.stdin.readline

# 이제 input()을 그대로 사용할 수 있습니다
n = int(input())

이렇게 하면 기존 input() 함수를 sys.stdin.readline()으로 대체할 수 있어 코드의 가독성을 유지하면서도 빠른 입력 처리가 가능합니다.

추가로, 여러개의 정수를 입력받고 싶다고 할 때, 아래와 같이 입력받을 수 있습니다.

import sys
input = sys.stdin.readline

a, b, c = map(int, input().split())

이 코드에서 1 3 5 를 입력하면, a에는 1이, b에는 3이, c에는 5가 들어가게 됩니다.

또, 예를 들어 임의의 개수의 정수를 한줄에 입력받아서 저장하고 싶다면 아래와 같이 할 수 있습니다.

import sys
input = sys.stdin.readline

data = list(map(int, input().split()))

이렇게 한다면, data 라는 변수에는 입력한 값이 각각 저장되고, data 는 리스트라는 타입을 가지게됩니다.

sys 를 통한 빠른 입출력
https://kimjinwoo.me/posts/20240714-algorithm-1/
Author
Jinwoo Kim
Published at
2024-07-14