보통 C++을 이용하여 알고리즘 문제를 풀 때 시간초과를 방지하기 위해서 이 코드를 추가해준다.
ios::sync_with_stdio(false);
cin.tie(0);
기존 입출력을 cin, cout, printf, scanf 함수를 이용하다가
cin과 cout만을 이용하고, 이렇게 두 줄만 추가해주면 시간초과로 인해 틀렸던 문제가 맞는 경우가 종종 있다.
그 이유는 문제에서 입출력 양이 굉장히 많아지면, 입출력하는데 소모시간이 많아져서 시간초과가 발생하기 때문이다. 위 코드를 작성하면 입출력 속도가 빨라지고, 그로인해 시간초과로 틀렸던 문제가 맞게 된다.
이 코드는 C와 C++ 표준 stream의 동기화를 비활성화한다.
동기화가 활성화 되어있을 땐 C 스타일(printf, scanf)과 C++스타일(cin, cout)의 입출력을 혼합해도 문제가 없다.
하지만 이 코드를 작성하면 C 스타일과 C++ 스타일이 혼합할 수 없는 대신에,
C++ 스타일 코드만 사용하면 기존 동기화 과정에서 필요하던 시간이 절약되어
입출력 속도가 빨라지는 효과가 있다.
➡️ 즉 알고리즘 문제를 풀 때는 표준 stream의 동기화는 필요없고 시간이 절약되는 게 우선이니 ios::sync_with_stdio(false)를 사용하여 입출력 시간을 절약할 수 있다.
다만 이 코드를 사용하면 기존 C의 표준 입출력인 scanf, printf, getchar 함수를 사용하면 오류가 발생할 수 있다. C++의 입출력인 cin, cout만 사용하도록 주의해야함!
cin.tie는 평소 cin과 cout을 묶어준다.
cout << "Write your name\n" <<;
cin >> name;
이런 코드가 있다면 평소에는 cin과 cout이 하나로 묶어져 있어서 "Write your name\n가 반드시 먼저 출력된 후 이름을 입력할 수 있다.
그러나 cin.tie(0)이나 cin.tie(null) 코드를 추가해 주면 "Write your name\n" 출력이 되기 전에 이름을 입력할 수 있다. 내부적으로 cin과 cout을 묶어주는 과정을 수행하지 않기 때문에 시간이 절약된다.
다른 프로그램에서 이렇게 사용한다면 이름을 입력해달라고 요구하기 전에 입력을 할 수 있는 자연스럽지 못한 프로그래밍일 수 있다. 근데 알고리즘 문제를 풀 때는 크게 상관이 없고, 입출력 시간을 절약할 수 있기 때문에 cin.tie(0) 코드를 많이 사용한다.