경쟁 프로그래밍에서 가장 중요한 것은 효율적인 코드 작성입니다. 최적화되고 빠른 코드는 프로그래머의 순위를 좌우할 수 있는 결정적인 차이를 만들어냅니다.
이번 글에서는 경쟁 프로그래밍에서 효율적인 C/C++ 코드를 작성하는 데 도움이 되는 핵심 개념과 실전 팁을 소개합니다.
기본 용어 정리
템플릿(Template) : 특정 자료형에 의존하지 않고 작성하는 코드입니다.
매크로(Macro) : 이름이 지정된 코드 조각으로, 반복되는 코드를 간결하게 줄여줍니다.
벡터(Vector) : 요소의 삽입과 삭제에 따라 크기가 자동으로 조절되는 동적 배열입니다.
코드 효율을 높이는 기본 팁
빠른 입출력 방식 사용 : scanf/printf는 cin/cout보다 빠른 입출력 방식입니다.
변수에 최댓값·최솟값 할당 : min/max 함수를 활용하면 불필요한 작업을 줄일 수 있습니다.
범위 기반 루프(Range-based Loop) 활용 : 배열이나 벡터를 순회할 때 범위 기반 루프를 사용하면 코드가 간결해지고 인덱스 오류 가능성도 줄어듭니다.
예제
#include<iostream>
using namespace std;
int main() {
cout<<"Iterating over array using ranged array: ";
int array[]= {6, 10, 31, 17, 50};
for (const auto &value: array)
cout<<value<<" "; return 0;
}실행 결과
Iterating over array using ranged array: 6 10 31 17 50
추가 최적화 팁
적절한 헤더 파일 사용 : C++에는 다양한 기능을 제공하는 여러 라이브러리가 있습니다.
#include<bits/stdc++.h>헤더 하나만 포함해도 경쟁 프로그래밍에 필요한 거의 모든 표준 라이브러리를 사용할 수 있어 매우 편리합니다. 다만, 실제로 필요한 기능인지 확인한 후 사용해야 하며, 불필요하게 포함하면 컴파일 시간과 메모리 공간이 낭비될 수 있습니다.컨테이너 활용으로 공간 절약 : vector, map, list 같은 STL 컨테이너는 경쟁 프로그래밍의 다양한 문제를 해결하는 데 유용합니다. 미리 정의된 함수들을 활용하면 코드 길이를 크게 줄이고 효율성을 높일 수 있습니다.
auto 키워드로 자료형 선언 : auto를 사용하면 컴파일 타임에 자료형이 자동으로 결정되므로, 복잡한 이터레이터나 컨테이너 자료형 선언을 간결하게 처리할 수 있습니다.
이 외에도 ios_base::sync_with_stdio(false)와 cin.tie(NULL)을 함께 사용하면 cin/cout의 입출력 속도를 크게 향상시킬 수 있습니다. scanf/printf 대신 스트림 입출력을 선호한다면 특히 유용한 방법이니 꼭 기억해 두세요.