코포나 앳코더처럼 주어진 시간이 짧고 시간 패널티가 곧 점수가 되는 대회에서는 템플릿 코드라는 걸 이용하는 사람들이 있다.


어짜피 99.9%의 문제는 입력을 받아야 하니까 (특히. GCJ나 HKC는 무조건 테케가 있기 때문에 테케를 받는 코드가 필요하다)
입력을 받는 코드를 미리 적어두고, 문제를 풀기 시작하면 CCCV 한 뒤 그 다음부터 작성하자는 것이다.


거기에서 한 걸음 더 나아가서, 자주 쓰는 명령어들을 짧게 작성할 수 있도록 매크로를 선언해둔다거나
typedef long long ll; typedef pair<int,int> ii; 를 해둔다거나
bits/stdc++.h와 using namespace std를 미리 해둔다거나
dx, dy (좌표 4 방향), MOD = 1000000007 처럼 자주 쓰이는 상수를 적어둔다거나 하는 사람이 있고


더 나아가서 몇몇 짧은 알고리즘까지 적어두는 사람이 있다. (여기까지 가면 이미 팀노트 수준이다)
최근에는 컴파일러 장난까지 보았다. (#pragma GCC optimize("O3"))


하지만 난 이러한 코드를 사용하지 않는게 좋다고 생각한다.
왜 사용하지 않는게 좋은가? 여러가지 이유 중 2개를 뽑아보자면


1. ACM-ICPC에서는 팀노트를 사용하기 때문이다. 팀노트의 내용은 내가 손으로 직접 쳐야한다.
저걸 일일히 치고있을 바에야 그냥 처음부터 잘 짜고 만다.


2. 코드의 가독성이 떨어지기 때문이다. ACM-ICPC 중에서는 서로의 코드를 리뷰해야 할 일이 생기는데,
각자 연습할 때 서로 이용하는 템플릿이 다를꺼고, 이는 다른 사람의 코드를 알아보기 어렵게 만든다.
물론 설명하거나 같은 코드를 가지고 합동 연습하면 되지만, 굳이 그렇게까지 할 필요가 있을까?


알고리즘 공부를 하는 이유에는 재미도 있겠지만, 궁극적으로는 좋은 프로그래머가 되고 싶기 때문이 아닐까?
이를 위해 공부하는거라면 저런 습관들은 자제해야 한다고 생각한다.


여기에 동감한다면 자신의 코드에 있는 #include <bits/stdc++.h>를 제거하고
각각의 함수, 클래스가 어느 헤더에 있는지 알아보는 걸로 시작하는것이 하나의 방법이 될 것이다.