티스토리 뷰

C++이 지원하는 cout과 cin 함수가 C의 scanf, printf 보다 느리다는 사실은 많은 사람들이 알고 있다.

 

알고리즘 문제를 풀면서 입출력 시간이 크게 중요하지 않은 경우에는 C++의 입출력 함수가 쉽기 때문에 주로 사용을 했는 데, 많은 사람들이 속도를 위해서 C의 입출력 함수를 사용한다. 

 

과연 속도가 얼마나 차이가 날지 궁금했다.

 

실험은 알고리즘 문제 풀이 과정에서 입출력 부분만 바꿔서 실험해보았다.

일반적으로 입출력의 병목현상이 심할 경우에 혹은, 입출력 함수의 비중이 큰 경우 일수록 크게 차이가 날 것이다.

 

다만 이 몇 가지 실험이 모든 일반적인 경우를 포함하지는 못하므로 참고용으로만 보면 좋을 것 같다.


SWexpert 아카데미에 있는 문제들로 테스트를 해보았다.

다른 코드는 동일하게 사용을 하고, 입출력 함수만 바꾸어 실행 시간이 어떻게 변하는 지 확인해봤다.

링크 : SWexpert 아카데미

 

위에서 부터

1. C의 입출력 함수

2. C++의 입출력 함수 + ios::sync_with_stdio(0);

3. C++의 입출력 함수

순으로 실행 시간을 나타낸다.


첫 번째의 test 경우에는 최대와 최소의 차이가 약 1.5% 정도의 차이로 작다.

하지만 두 번째(C++의 입출력 함수 + ios::sync_with_stdio(0);) 경우가 가장 빨랐다.

 

두 번째의 실험에서도 세 번째가 가장 느렸고 두 번째가 가장 빨랐다. 20% 이상의 차이를 보여줬다.

 세 번째 실험 결과도 마찬가지 였다.

 


결과를 확인해보니 C++의 입출력 함수를 이용하고 

ios::sync_with_stdio(0);
cin.tie(0); 

위의 코드를 추가해주는 것이 가장 실행시간이 빠르게 나타났다.


ios::sync_with_stdio(0); 에 대해서

 

[Algorithm] ios::sync_with_stdio(0); C++ 입출력 속도

C++ 프로그램에서 입력과 출력이 병목이 될 때가 있다. 혹은 쉽게 C++의 cout cin가 scanf 나 printf 에 비해서 느리기 때문에 가속화 시킬 목적으로 ios::sync_with_stdio(0); cin.tie(0); 을 코드 시작부분에 입..

doomed-lab.tistory.com

 

댓글
반응형
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함