python3가 아닌, C++로 코딩테스트 준비를 시작한 지 얼마되지 않아, 모르는 것 투성이다.
C++프로그래밍 수업을 들으면서 cin, cout보다 scanf, printf가 좀 더 빠르다는 것을 알게 되었다.
이번에 코딩테스트 준비를 시작하면서 '그럼 cin대신 scanf로 형식을 지정해서 입력을 받아야하나..?' 라는 생각을 잠시 갖다가,
현재는 구현에 집중하는 것이 맞다고 생각하고 넘어갔다.
입력은 cin을 사용했지만, 개행은 endl이 아닌 '\n'을 사용했으니 괜찮다고 생각했다.
속도 개선 코드를 사용하더라도 정확히 알고 사용하는 것이 중요하다고 생각하기 때문에, 이해하고 정리하느라 시간이 좀 걸렸다.😢
그래도 분명 틀린 점이 있을 수 있으니..ㅎㅎ
속도 개선 코드
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
//todo
return 0;
}
위 코드 두 줄을 써주면 입출력 속도가 개선(속도 향상)된다고 한다.
살펴보기
static bool sync_with_stdio( bool sync = false );
C++의 표준 스트림이 입출력 작업 후 C 표준 스트림과 동기화 설정 여부를 지정하는 메소드
C++ 표준 스트림은 대표적으로 우리가 사용하는 std::cin, std::cout 등이 있고, C 표준 스트림에는 대표적으로 stdin, stdout 등이 있다.
C++ 컴파일러는 C++과 C 스타일 입출력을 모두 사용할 수 있도록 허용하기 때문에, C++에서 스트림을 C 스트림과 동기화 할 수 있도록 한 것 같다. 이렇게 동기화를 함으로써, C++은 C 스타일의 입출력도 자유롭게 사용가능하게 된다.
동기화의 단점은 느려지는 속도이기 때문에, 시간이 중요한 코딩테스트에서는 이 동기화를 꺼줌으로써(false로 설정) C++표준 스트림이 입출력을 독립적으로 훨씬 더 빠르게 버퍼링 할 수 있도록 하는 것 같다.
iostream::cin.tie(NULL);
아래의 출처를 참고하였습니다.
https://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
std::ios_base::sync_with_stdio - cppreference.com
static bool sync_with_stdio( bool sync = true ); Sets whether the standard C++ streams are synchronized to the standard C streams after each input/output operation. The standard C++ streams are the following: std::cin, std::cout, std::cerr, std::clog, std:
en.cppreference.com
https://www.acmicpc.net/board/view/39968
글 읽기 - [c++] cin,cout보다 scanf,printf를 선호하는 이유?
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
https://leeeegun.tistory.com/4
cout, cin 최적화 방법과 주의점
cout과 cin의 속도를 빠르게 하기 위해서는 1 2 3 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 이 구문을 추가해주면 된다. 하지만 이 구문이 단순히 최적화해주는 구문이라고 생각하고 사용하..
leeeegun.tistory.com
Significance of ios_base::sync_with_stdio(false); cin.tie(NULL);
What is the significance of including ios_base::sync_with_stdio(false); cin.tie(NULL); in C++ programs? In my tests, it speeds up the execution time, but is there a test case I should be worried...
stackoverflow.com
'코딩테스트(Coding Test) > 백준' 카테고리의 다른 글
[백준][C++]#10989 수정렬하기 (0) | 2022.10.10 |
---|---|
[백준][C++]#2609 최대공약수와 최대공배수 (0) | 2022.10.09 |
[백준][C++]#2798 블랙잭 (0) | 2022.10.08 |
[백준][C++]#2309 일곱 난쟁이 (0) | 2022.09.25 |
[C++|헤더] bits/stdc++.h (0) | 2022.09.25 |