C++로 알고리즘 문제를 풀 때 cin
, cout
을 사용하면 실행 속도가 느려질 수 있다. 하지만 최적화 기법을 적용하면 실행 시간을 효율적으로 단축할 수 있다. 특히 문제 풀이 시 시간 제한이 중요한 경우, 아래와 같은 방법을 사용해 속도를 줄여보자.
cin
, cout
최적화 시에는 약 절반 정도의 시간 단축 효과를 기대할 수 있다.
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); // C와 C++의 입출력 동기화 해제
cin.tie(NULL); // cin과 cout의 묶음 해제
cout.tie(NULL); // cout의 묶음 해제
// 예제 입출력
int a, b;
cin >> a >> b;
cout << a + b << "\n";
return 0;
}
ios_base::sync_with_stdio(false);
기본적으로 cin
, cout
은 C의 stdio
와 동기화되므로 느려질 수 있다. 이 옵션을 false
로 설정하면 동기화를 해제하여 C++ 표준 입출력을 빠르게 처리할 수 있게 된다.
2. cin.tie(NULL);
및 cout.tie(NULL);
cin
과 cout
의 묶음을 풀어줘 입출력 간의 독립성을 보장한다. 이로써 불필요한 대기 시간이 줄어들어 실행 속도가 더 빨라진다.
cin
, scanf
또는 cout
, printf
를 혼용하면 예상치 못한 결과가 발생할 수 있다. 동기화를 해제한 후 혼용 시 문제 발생 가능성이 있으므로 동일한 입출력 방식을 사용해야 한다.
이 최적화 기법은 싱글 스레드 환경에서만 효율적이다. 알고리즘 문제 풀이와 같은 상황에서 유용하지만, 실무에서는 입출력 동기화가 필요한 경우가 많으므로 신중히 사용하자.
속도가 중요하지 않다면, 그냥 printf와 scanf를 사용하는 것도 좋은 대안이 될 수 있다. 최적화가 필요한 상황에서만 활용하는 것이 좋다.
C++에서 cin,
cout
최적화는 알고리즘 문제 풀이 시 입출력 속도를 개선하는 데 효과적이다. 단, 동기화 해제에 따른 주의 사항을 염두에 두고 사용하는 것이 필요하다.