FastIO

빠른 입출력

YEAHx4

YEAHx4

2025-04-13
4 mins

FastIO

기본 입출력은 출력과의 동기화나 여러가지 처리가 있기 때문에 생각보다 느립니다. 문제의 입력이나 출력이 많은 경우 입출력 만으로도 시간 초과가 발생할 수 있습니다. 그래서 입력 속도를 증가시키는 코드 몇 줄을 넣어서 입출력 속도를 높입니다. 입출력 속도와 관련해서는 baekjoon님의 벤치마크를 참고하세요.

FastIO의 엄밀한 뜻은 입출력 과정을 고급 API를 사용하지 않고 저수준 API를 사용하여 직접 구현해 입출력 속도를 크게 높이는 것을 의미합니다. 다만, 그러면 입출력 코드가 굉장히 복잡해지고 길어집니다. Python에서는 저수준 API에 접근하는 것이 사실상 불가능 하기도 합니다. 대신 간단한 코드 몇 줄로 비슷한 정도로 입출력 속도를 크게 높일 수 있기 때문에 여기서는 그 방법을 소개합니다. 대부분의 문제는 이정도 속도로도 문제가 생기지 않습니다. 제대로 된 FastIO에 대해서는 jinhan814님의 블로그를 참고해 주세요.

Python

Python에서는 input() 함수 대신 sys 모듈의 stdin.readline() 함수를 사용하면 입출력 속도를 크게 높일 수 있습니다. 보통 input을 덮어써서 사용합니다.

import sys

input = sys.stdin.readline()

이렇게 쓸 수 있습니다. 대신 주의할 점으로 readline의 특성상 마지막 개행문자(\n)까지 읽어오기 때문에 숫자로 파싱하지 않고 문자열 그대로가 필요하다면 strip() 등을 통해 정리해 주어야 합니다.

C++

C++에서는 몇 줄의 코드를 추가합니다.

#include <iostream>

using namespace std;

int main() {
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios::sync_with_stdio(false)
}

저 3줄의 코드를 추가해주면 됩니다. 다만 주의할 점은 C++스타일 입출력(cout, cin)과 C스타일 입출력(printf, scanf)을 섞어쓰면 안됩니다. iostream과 stdio의 버퍼는 서로 다릅니다. 기본 설정으로 두 버퍼가 서로 동기화되지만 sync_with_stdio(false)로 동기화를 비활성화 했기 때문에 입출력 순서가 꼬이거나 같은 문자를 읽거나 하는 문제가 생길 수 있습니다.

연습문제