내가 맨날 까먹는 거 정리해놓는 페이지
vector::push_back()
- 대부분의 경우 O(1)
- 다만, 재할당이 필요한 경우 O(n)이 되므로 예상 크기가 큰 경우에는 reserve를 사용하여 재할당 횟수를 줄이자
입출력 속도 높이기
- scanf/printf와는 다르게 cin/cout에서는 입출력으로 인한 시간초과를 방지하기 위해 반드시 ios::sync_with_stdio(0), cin.tie(0)이라는 두 명령을 실행시킬 것
ios_base::sync_with_stdio(0) : C++ stream과 C stream의 sync를 끄는 명령.
기본적으로는 C++ stream과 C stream 간의 출력 순서를 유지할 수 있도록 sync를 유지하고 있으나, cout만 사용할 경우 sync를 유지할 필요가 없으므로 시간을 절약하기 위해 sync를 꺼야한다. 반대로 말하면, 해당 명령을 실행한 이후에는 반드시 printf를 쓰지 말고 cout만 사용해야 함
cin.tie(0) : cin과 cout이 번갈아 나올 때 마다 flush를 하지 않도록 하는 명령. 채점 환경에서는 input buffer와 output buffer가 분리되어 있기 때문에 flush 해줄 필요 없음.
endl 대신 \n 사용 : endl은 줄을 바꾸고 flush를 하라는 명령이므로 endl을 사용하면 불필요한 flush 명령이 지속적으로 발생해 시간초과가 발생할 수 있음
메모리 초과시
- vector나 pair 등 막쓰면 가끔 메모리초과 남
- 일반 배열로 한번 바꿔보기
- 이래도 안되면 로직문제