[C++]코딩테스트 문제풀이 팁 정리
python, C, C++, ... 여러 언어로 문제풀이를 진행하다보니, 언어마다 문제풀이 기본 문법이 달라 헷갈리는 문제가 있다.
앞으로는 C++ 로 문제 풀이를 진행할 계획이라, 나 혼자 보고 정리할 목적으로 글 작성한다.
1. ios_base::sync_with_stdio(false) + cin.tie(0); cout.tie(0);
C++로 문제 풀이시, 시간초과를 방지하기 위해 꼭 입력하는 두 줄이다.
1.1 ios_base::sync_with_stdio(false)
이 코드는 C와 C++, 각각 stdio와 iosteram 스트림 간의 동기화를 비활성화(false)로 바꾸어준다.
이를 통해, C와 C++ 각각이 독립된 버퍼를 갖게 되면서 입출력 처리 속도가 빨라지는 효과를 갖게된다.
주의할 점은 C의 표준 입출력인 scanf, printf, getchar 함수를 사용하면 오류가 발생할 수 있으므로 C++로 코드 작성시 사용하지 않도록 유의해야한다.
1.2 cin.tie(0); cout.tie(0);
이 코드는 cin 과 cout을 분리시켜준다.
기본적으로 cin과 cout은 묶여서 사용되는데, cin 이전에 cout으로 버퍼가 사용되었다면 cin을 사용하기 위해서는 '버퍼 비워주기 + 입력받기' 과정이 필요하다.
즉, cin이 바로 입력받지를 못하고 버퍼 비워주기 과정이 추가되어 시간 지연이 발생한다.
따라서 cin과 cout을 분리시켜 줌으로써 버퍼를 비워주지 않아도 바로 cin 입력이 가능해지고 시간 단축 효과가 있다.
e.g.
include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
...
return 0;
}
2. endl 대신 \n 사용
C++로 코드 작성 시, cout의 맨 뒤에 endl;을 많이 사용한다.
하지만 endl은 '개행문자 출력 + 버퍼비우기' 과정으로 실행되기 때문에, '개행문자 출력' 만 존재하는 \n에 비해 시간이 더 걸린다.
e.g.
cout << answer << endl;
cout << answer << "\n"; //시간 단축 효과
참고
[1] https://8156217.tistory.com/47
[2] https://dingcoding.tistory.com/62