본문 바로가기
개발/C, C++

[C++] C++ 입출력 속도를 더 빠르게 처리하는 방법

by candosh 2023. 7. 8.

코딩테스트 문제를 풀 때 맞는 문제의 맞는 알고리즘을 썼고, 최적화를 했지만 시간 초과가 난다면!

 

아래 방법을 사용해 보는 것을 추천한다!


1. ios_base::sync_with_stdio(false)

첫 번째 방법은 위의 코드를 main 초반에 써주는 것이다! C++의 'cin'과 'cout'와 C의 'scanf'와 'printf'는 기본적으로 입출력 버퍼를 동기화하도록 설정되어 있다고 한다. 하지만 입출력 속도를 저하시킬 수 있으므로 'ios_base::sync_with_stdio(false)'를 사용하여 입출력 버퍼 동기화를 해제하면 입출력 속도가 향상된다.

 

**주의할 점은 위의 설정 이후에는 C++의 cincout과 C의 scanfprintf를 함께 사용하지 않도록 해야 한다.

 

2. cin.tie(NULL)

'cin'과 'cout'이 둘 다 연결되어 있을 때, 입출력 버퍼의 동기화로 인해 입출력 속도가 저하될 수 있다고 한다. 'cin.tie(NULL)'을 이용하여 cin과 cout의 연결을 해체해 입출력 속도를 향상한다.

 

3. '\n' 사용하기

개행문자를 출력할 때 'endl' 대신 '\n'으로 출력하는 것이다. 'endl'은 개행문자 출력 기능 외에도 출력 버퍼를 비우는 역할을 한다. 따라서 버퍼를 비우는 작업은 입출력 속도를 저하시킬 수 있으므로, '\n'의 사용하여 개행문자를 출력하는 것이 더 효율적이다.

 

위의 방법을 모두 적용한 예시 코드


추가로 꿀팁은!

ios_base::를 ios::만 써도 괜찮다고 한다!

 

false랑 null은 다 0으로 쓸 수 있으니
ios::sync_with_stdio(0); cin.tie(0); 로 쓴다면 시간절약!!☀️