Post

[C++] cin, cout 시간 초과 해결 방법

cin, cout 사용 시 시간 초과 발생

알고리즘의 시간 복잡도를 O(N)으로 맞게 구현 했는데도 시간 초과가 발생할 때가 있다. C++로 문제를 풀 때 cin, cout을 사용해서 문제가 발생한 것이다. cin, cout은 scanf, printf보다 컴파일 속도가 느리다.

코딩 테스트 시 scanf, printf와 cin, cout을 섞어서 사용하면 안되기 때문에, 무조건 cin과 cout을 사용해서 입출력을 처리해야 한다면 코드에 아래와 같은 선언을 작성하자.

1
2
ios::sync_with_stdio(false);
cin.tie(NULL);

ios::sync_with_stdio(false);

C++에서 사용하는 #include <iostream>과 C에서 사용하는 #include <stdio.h>를 동기화 시킨다. 따라서 iostream, stdio의 버퍼를 모두 사용하기 때문에 지연이 발생한다. false로 설정해서 동기화를 하지 않고 C++만의 버퍼를 사용하도록 한다.

cin.tie(NULL);

cincout에 바인딩 되어 있어서 cin에서 입출력을 수행하기 전에 flush를 호출해서 I/O 부담이 증가한다고 한다. 따라서 바인딩을 해제해서 사용한다.

“\n”으로 개행 사용

cout에서 endl은 개행 문자를 출력하면서 출력 버퍼를 비우기 때문에 속도가 느리다. "\n"으로 개행을 처리해야 한다.

참고 자료

This post is licensed under CC BY 4.0 by the author.