Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 경쟁 프로그래밍에서 코드를 짧게 줄이는 방법 (typedef와 매크로 활용)

경쟁 프로그래밍(코딩 테스트)에서는 제한 시간 안에 문제를 해결해야 하기 때문에 코드를 빠르고 간결하게 작성하는 것이 매우 중요합니다. 이번 글에서는 반복되는 긴 코드를 줄여 생산성을 높이는 대표적인 기법인 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 longll로 줄이면 코드가 훨씬 깔끔해집니다.

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_backPB, firstF처럼 반복 호출되는 구문을 축약합니다.
  • C++11 이상 환경이라면 auto 키워드나 범위 기반 for문(for(auto &x : v))을 함께 활용하면 코드를 더욱 간결하게 만들 수 있습니다.
  • 단, 매크로는 디버깅 시 가독성을 해칠 수 있으므로 개인 템플릿(스니펫)으로 관리하는 것이 좋습니다.

이러한 축약 기법을 미리 준비된 템플릿 형태로 저장해 두면, 실전 대회에서 불필요한 타이핑 시간을 크게 줄이고 문제 풀이에만 집중할 수 있습니다.