방법1

다음 코드를 int main 내부에 넣어줍니다.

  • ios_base::sync_with_stdio(0);: C++ iostream과 C stdio 사이의 동기화를 비활성화하여, iostream 라이브러리가 stdio와 독립적으로 작동하도록 합니다. 이렇게 하면 스트림 간의 상호작용 없이 C++의 iostream이 더 빠르게 작동할 수 있습니다.
  • cin.tie(0)와 cout.tie(0): cin과 cout의 결합을 끊어서, cin이 불릴 때마다 cout이 자동으로 플러시되지 않도록 합니다. 플러싱을 줄이면 불필요한 입출력 지연이 줄어들어 속도가 개선됩니다.
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

 

주의점

  • 이 설정을 적용하면 C++의 iostream (cin, cout)과 C의 stdio (scanf, printf)를 함께 사용할 때 순서가 보장되지 않아 혼동될 수 있습니다.
  • C++ 스트림의 thread 안전성도 보장되지 않으므로 멀티스레딩 환경에서는 신중하게 사용하는 것이 좋습니다

방법2

endl 대신 "\n" 을 사용합니다.

cout << "문자열" << "\n";
  • endl은 개행을 수행할 뿐 아니라 출력 버퍼를 비우는 flush 동작을 수행하여, 버퍼에 있는 내용을 강제로 출력합니다.
    • endl 을 사용했을때: 버퍼에 값 입력 -> 값출력 -> 버퍼에 값 지우기 -> 버퍼에 값 입력 ...
    • "\n" 을 사용했을때: 버퍼에 값 입력 -> 값 출력 -> 버퍼에 값 입력 -> 값 출력 ...
  •  "\n"은 단순히 줄바꿈을 수행하며, flush 동작이 따르지 않기 때문에 endl보다 속도가 더 빠릅니다.
\n을 사용하면 버퍼가 언제 비워지는가?
버퍼가 가득 찰 때 또는 프로그램이 종료될 때까지 값을 출력하지 않고 버퍼에 계속 쌓습니다.
특정 시점에 버퍼를 비우며 출력 (버퍼 비우기나 flush는 버퍼가 가득 찼거나 cout이 닫힐 때 자동으로 이루어집니다.

 

ytw_developer