ios_base::sync_with_stdio(false), cin.tie(NULL)을 사용하는 이유

less than 1 minute read

C++ 알고리즘 문제풀 때 실행 속도를 높이는 방법

  • 알고리즘 문제를 풀 때 아래 구문을 추가해주면 실행속도를 높일 수 있다.
std::ios_base::sync_with_stdio(false);
std::cin.tie(null);

ios_base::sync_with_stdio(false)

  • C의 표준입출력인 stdio 와 C++의 iostream 을 동기화시켜주는 역할을 하는데, 이를 활성화해두면 stdio 와 iostream 의 버퍼를 모두 사용하기 때문에 딜레이가 발생한다.
  • 따라서 false 로 동기화를 비활성화시켜주면, C++만의 독립적인 버퍼가 생성되어 사용하는 버퍼의 수가 줄어들면서 실행 속도는 빨라진다.
  • 알고리즘 문제풀이 같이 싱글 쓰레드 환경에서는 문제가 되지 않지만, 멀티 쓰레드 환경에서는 출력 순서를 보장할 수 없다.
  • 버퍼가 분리되었기 때문에 cin 과 C의 scanf, gets, getchar 등을 같이 사용하면 안되고, cout 와 C의 printf, puts, putchar 등을 같이 사용하면 엉뚱한 결과가 나올 수 있다.

cin.tie(null)

  • cin 과 cout 는 기본적으로 묶여 있어서 cin 으로 입력을 받을 때 출력버퍼를 먼저 비우는데 이 묶음을 해당 코드로 풀어주면 출력 명령을 내리거나 버퍼가 가득 찼을 경우에만 버퍼를 비우고 출력한다.
  • 입력과 출력을 여러 번 번갈아가며 반복해야하는 경우 해당 구문을 추가하여 묶음을 풀어주면 실행속도를 크게 높일 수 있다.

Categories:

Updated:

Leave a comment