기본적으로 cin, cout을 쓸 때 보다 scanf, printf가 더 빠르다.




사진 출처 : https://algospot.com/forum/read/2496/

cin, cout을 사용하더라도 sync_with_stdio(false)로 속도를 가속할 수는 있지만, 이는 정공법적인게 아니라 일종의 편법같은 방식이고, 이 방식도 통하지 않는 경우가 있습니다.(그래도 scanf, printf속도로만 정답이 나오는 경우) 그리고 sync_with_stdio를 false로 준 경우, scanf, printf와 같은 C 표준 입출력 함수와 cout, cin같은 C++ 입출력 객체를 섞어 사용하는 경우 오답처리가 날 수 있습니다. 입출력이 코드 작성자가 의도하지 않은 순서로 나타난다던가 하는 일이 일어날 수 있다는 것이죠. 특히 멀티 쓰레드 환경일 경우 sync 값이 true일 때는 Thread safe라서 예상치 못한 값이 나오지 않지만, false를 시킬 경우 Thread unsafe해지기 때문에 예상치 못한 값이 나타날 수 있습니다.


그러므로 궂이 sync_with_stdio(false); 를 이용해서  C++ 입출력 객채를 가속시켜서 사용할 것이라면, scanf와 printf와 섞어서 사용하지 말 것이며, 싱글 쓰레드 환경에서만 사용(알고리즘 문제만 풀 때는 무조건 싱글스레드이므로 상관없지만 실무에선 쓰지말것)하고, 그래도 시간초과가 난다면 C 표준입출력 함수들을 사용하는 것을 추천하는 바입니다.


출처: http://eine.tistory.com/16


따라서 알고리즘 문제를 풀시에 c++방식으로 해결하려한다면

ios_base :: sync_with_stdio(false);

cin.tie(NULL);

cout.tie(NULL); 

을 사용하는 것이 낫고, sync_with_stdio(false);를 사용하면 printf,scanf와 섞어서 사용하지말자(컴파일 에러가 발생)


'Tip' 카테고리의 다른 글

방향 탐색시(dfs,bfs 등등)  (0) 2018.09.08
pair/ priority_queue  (0) 2018.07.14
string < - > int 형변환  (0) 2018.07.08

+ Recent posts