경쟁 프로그래밍(코딩 테스트)에서는 제한 시간 안에 문제를 해결해야 하기 때문에 코드를 빠르고 간결하게 작성하는 것이 매우 중요합니다. 이번 글에서는 반복되는 긴 코드를 줄여 생산성을 높이는 대표적인 기법인 typedef와 #define 매크로의 활용 방법을 예제와 함께 살펴보겠습니다.
1. typedef로 타입 이름 축약하기
경쟁 프로그래밍에서는 큰 정수를 다루기 위해 long long 타입을 자주 사용합니다. 하지만 이 타입 이름을 매번 길게 입력하는 것은 번거롭습니다. 아래 기본 코드를 확인해 보세요.
기본 코드
#include <iostream>
using namespace std;
int main() {
long long x = 10;
long long y = 50;
cout << x << ", " << y;
}출력 결과
10, 50
typedef를 사용하면 긴 타입 이름에 별칭을 붙일 수 있습니다. long long을 ll로 줄이면 코드가 훨씬 깔끔해집니다.
typedef 적용 코드
#include <iostream>
using namespace std;
typedef long long ll;
int main() {
ll x = 10;
ll y = 50;
cout << x << ", " << y;
}출력 결과
10, 50
이렇게 선언해 두면 이후에는 long long을 반복해서 쓰지 않고 짧은 ll만으로 동일한 타입을 사용할 수 있습니다.
2. 매크로(#define)와 typedef로 STL 코드 줄이기
템플릿이나 STL 컨테이너를 사용할 때도 같은 방식으로 코드를 단축할 수 있습니다. #define 매크로를 활용하면 push_back, first, second처럼 자주 등장하는 멤버 함수나 속성도 짧게 대체할 수 있습니다.
예제 코드
#include <iostream>
#include <vector>
#define F first
#define S second
#define PB push_back
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
int main() {
vi v;
pii p(50, 60);
v.PB(10);
v.PB(20);
v.PB(30);
for(int i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl;
cout << "First : " << p.F;
cout << "\nSecond: " << p.S;
}출력 결과
10 20 30 First : 50 Second: 60
정리 및 추가 팁
- typedef:
vector<int>→vi,pair<int,int>→pii처럼 복잡한 타입에 짧은 별칭을 부여합니다. - #define 매크로:
push_back→PB,first→F처럼 반복 호출되는 구문을 축약합니다. - C++11 이상 환경이라면
auto키워드나 범위 기반 for문(for(auto &x : v))을 함께 활용하면 코드를 더욱 간결하게 만들 수 있습니다. - 단, 매크로는 디버깅 시 가독성을 해칠 수 있으므로 개인 템플릿(스니펫)으로 관리하는 것이 좋습니다.
이러한 축약 기법을 미리 준비된 템플릿 형태로 저장해 두면, 실전 대회에서 불필요한 타이핑 시간을 크게 줄이고 문제 풀이에만 집중할 수 있습니다.