← 모든 알고리즘

빠른 입출력

대량 입출력 가속 — sync_with_stdio(false), tie(NULL), 줄바꿈은 "\n".

Bronze
빠른 입출력: 시간 초과(TLE)를 막는 법 공식

왜 빠른 입출력이 필요한가?

입출력하는 줄 수가 수십만 ~ 수백만 줄이 되면, 입출력 자체가 느려서
시간 초과(TLE)가 나기도 합니다. 알고리즘이 맞아도 입출력 때문에 떨어지는
것이죠. 다행히 정해진 몇 줄만 추가하면 크게 빨라집니다.


1. C++ — 동기화 끄기 3종 세트

main맨 처음에 넣으세요.

#include <bits/stdc++.h>
using namespace std;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    // 이후 cin / cout 사용
}
  • sync_with_stdio(false) — C 표준 입출력(scanf/printf)과의 동기화를 끊어 cin/cout을 빠르게 만듭니다.
  • cin.tie(nullptr) — 입력 전마다 출력을 자동으로 비우던 동작을 꺼서 속도를 올립니다.

주의: 동기화를 끈 뒤에는 cin/coutscanf/printf섞어 쓰지 마세요.


2. C++ — 출력은 '\n', endl 금지

cout << x << '\n'; // 빠름 (권장)
cout << x << endl; // 느림 — 매번 버퍼를 비운다(flush)

출력이 많을 때 endl'\n'으로 바꾸기만 해도 눈에 띄게 빨라집니다.


3. Python — input() 대신 sys.stdin

파이썬 기본 input()은 줄 수가 많으면 느립니다.

import sys
input = sys.stdin.readline # 한 줄을 빠르게 읽는다

n = int(input())
for _ in range(n):
    a, b = map(int, input().split())
    # ...

sys.stdin.readline줄바꿈 문자(\n)까지 함께 읽으므로, 문자열을
비교할 땐 .rstrip()으로 끝의 줄바꿈을 떼 주세요. (숫자로 int(...) 변환할
땐 줄바꿈이 자동으로 무시되어 괜찮습니다.)


4. Python — 출력도 모아서 한 번에

print를 수십만 번 부르면 느립니다. 결과를 모았다가 한 번에 출력하세요.

import sys
out = []
for i in range(n):
    out.append(str(i * i))
sys.stdout.write('\n'.join(out) + '\n')

또는 print('\n'.join(map(str, answers))) 처럼 한 줄로도 가능합니다.


5. 자주 하는 실수

  • endl 남발 — 출력이 많은 문제에서 가장 흔한 TLE 원인.
  • 동기화 끄고 scanf와 혼용 — 입력 순서가 꼬일 수 있습니다.
  • readline의 줄바꿈 — 문자열 비교 시 \n이 붙어 있어 틀리는 경우. .rstrip() 하세요.

연습 팁

입출력 양이 많아 보이는 문제(예: "최대 1,000,000개의 수")를 만나면, 코드를
짜기 전에
위의 빠른 입출력 틀부터 깔아 두세요. 나중에 TLE가 났을 때
원인을 찾느라 헤매는 시간을 아낄 수 있습니다.