Written

cin / cout 그리고 printf / scanf 본문

C++ & C#

cin / cout 그리고 printf / scanf

steeringhead 2022. 12. 15. 21:24

cin과 cout은 C++에서 입력과 출력을 위해 사용하고 , printf와 scanf는 C에서 입력과 출력을 위해 사용합니다.

 

결론부터 말씀드리자면 printf와 scanf가 cin과 cout보다 두배 이상 빠르다고 합니다.

그래서 백준사이트에서 알고리즘 문제를 풀다가 보면 cin cout을 사용할 때는 시간 초과가 나지만, printf와 scanf로 변경하고나서 시간초과가 나지않고 정답으로 채점되는 경우가 종종 있었습니다.

 

 

printf와 scanf가 더 빠른이유


그러면 일단 printf와 scanf가 더 빠르다는 것은 알았고, 시간제한이 중요한 문제에서는 printf와 scanf의 사용을 적극 고려해봐야 한다는 것 또한 알았습니다. 그렇다면 가장 중요한 printf와 scanf가 더 빠른이유에 대해서 알아보도록 하겠습니다.

 

cin과 cout이 더 느린 이유는 iostream(C++입출력 라이브러리)과 stdio(C입출력 라이브러리)의 버퍼를 모두 사용하고 동기화하는 과정이 존재하기 때문입니다.

 

버퍼는 임시적으로 데이터를 저장하는 메모리인데 , 이해하기 쉽게 비유를 하자면 평수가 더 큰 집에서 친구들과 놀고나서 정리하는게 평수가 작은집에서 놀고 정리하는 시간보다 오래걸리는 것과 비슷하다고 생각해 볼 수 있습니다. 코드를 처리하는 컴퓨터 내부에서 동기화하는 과정이 결국 시간을 잡아먹게 되고 처리하려는 공간이 넓을수록 시간이 오래걸리게 되는것이지요. 그래서 그러한 동기화를 끊어서 cin과 cout의 시간을 향상시키는 방법도 존재합니다.

 

std::ios::sync_with_stdio(false);

std::ios_base::sync_with_stdio(false);

std::cin.sync_with_stdio(false);

 

위 3가지 함수중에 1개의 함수를 사용하면 cin과 cout의 처리속도를 향상 시킬 수 있습니다.

지금까지 다른 분들의 문제풀이를 보다보면 std::ios::sync_with_stdio(false); 이 코드가 심심치 않게 보였었는데 이제야

정확하게 저 코드가 무엇을 의미하는지 알았습니다  :D

 

참고 블로그 : https://jm19.tistory.com/4

Comments