언어 | 입력방식 | 수행시간(초) |
---|---|---|
C/C++ | scanf | 0.798 |
C/C++ | getchar(*) | 0.390 |
C++ | std::cin | 2.051 |
C++ | std::ios::sync_with_stdio(false) + std::cin | 0.796 |
java | java.util.Scanner | 6.068 |
java | java.io.BufferedReader(*) | 0.934 |
golang | fmt.Scan | 44.557 |
golang | bufio.Reader + fmt.Fscan | 9.899 |
golang | bufio.Scanner(*) | 1.299 |
(*): 문자(열) -> 정수 변환 필요
cin,cout 보다 scanf,printf 가 컴파일속도가 훨씬 빠르기 때문에 scanf, printf를 쓰는 것을 권장하지만 cin, cout 을 굳이 쓰고 싶다면 코드에서 ios::sync_with_stdio(false) 를 선언해주면 속도가 얼추 비슷해지는 것을 알 수 있다.
cin, cout 의 성능을 높히는 방법을 소개하겠다.
1. ios::sync_with_stdio(false)
ios::sync_with_stdio는 cpp의 iostream을 c의 stdio와 동기화시켜주는 역할을 합니다. 이는 iostream, stdio의 버퍼를 모두 사용하기 때문에 딜레이가 발생하게 됩니다. ios::sync_with_stdio(false)는 이 동기화 부분을 끊는 함수입니다. 이를 사용하면 c++만의 독립적인 버퍼를 생성하게 되고 c의 버퍼들과는 병행하여 사용할 수 없게 됩니다. 대신 사용하는 버퍼의 수가 줄어들었기 때문에 속도는 높아지게 됩니다.
2.cin.tie(NULL);cout.tie(NULL);
디폴트는 cout,cin이 tie되어 있습니다.이것을 풀어줍니다.
3.std::endl 대신에 "\n" 사용하기
endl는 개행만 해주는 것이아니라 개행 + 출력버퍼를 비워야 하기때문에 느립니다.
'C++' 카테고리의 다른 글
C++ 인라인 함수 (0) | 2018.05.02 |
---|---|
C++, C와 무엇이 다를까 (0) | 2018.04.30 |