C++

[C++] cin, cout 사용 시 시간초과 문제 해결 방법

곰제비 2022. 7. 1. 02:06

백준 문제를 풀다 보면 printf, scanf로 돌아가는 코드가 cin, cout를 쓰면  시간초과가 걸리는 경우가 있다.

여러 번 당해서 내용 찾아본 김에 간단히 적어본다.

 

  • ios::sync_with_stdio(false);
    ios::sync_with_stdio는 cpp의 iostream을 c의 stdio와 동기화 시키는 역할을 한다.
    이렇게 하면 iostream, stdio의 버퍼를 둘다 사용하여 딜레이가 발생한다.
    옵션을 false로 설정해서 c의 stdio와 동기화를 해제하면 c++만의 독립적인 버퍼를 사용하여 실행속도가 더 빨라진다.

  • cin.tie(NULL);
    기본적으로 cin은 cout에 묶여 있어서 cin에서 입력 작업을 수행하기 전에 항상 flush가 호출되어 작업 부담이 크다.
    tie(NULL)로 설정하여 cout과의 바인딩을 해제하여 실행속도를 높인다.

  • cout.tie(NULL);
    cout에서는 endl보다 개행문자 '\n'를 사용하는 것이 좋다.
    endl은 개행문자를 출력하면서 동시에 출력버퍼를 비우는 역할까지 수행해서 속도가 느리다.

여태 이유도 모르고 시간초과나면 저 코드부터 적고 봤는데 작동원리를 알고나니 좀 더 발전했을지도...ㅎㅎ

 

출처) https://algospot.com/forum/read/2496/