2. C++ 핵심 기능 및 STL 활용
USACO 문제 해결에 있어 C++의 강력한 기능과 표준 템플릿 라이브러리 (STL)를 숙지하는 것은 필수적입니다.
2.1. 데이터 타입 및 변수
문제의 제약 조건에 따라 적절한 데이터 타입을 선택하는 것이 중요합니다. 특히 큰 숫자를 다룰 때 주의해야 합니다.
int: 일반적으로 -2 * 10^9 에서 2 * 10^9 범위의 정수.long long: 약 -9 * 10^18 에서 9 * 10^18 범위 of 정수. (필요 시 자주 사용)double: 부동 소수점 수.bool: 참/거짓 값.
2.2. 입출력 최적화 심화
페이지 1에서 소개된 입출력 최적화 코드는 대량의 데이터를 빠르게 처리하는 데 필수적입니다. 이 코드를 사용하지 않으면 \'시간 초과\'가 발생하기 쉽습니다.
#include <iostream> // 또는 <bits/stdc++.h>
int main() {
// 이 두 줄은 거의 모든 경쟁 프로그래밍 문제에서 필수로 사용됩니다.
ios::sync_with_stdio(0);
cin.tie(0);
int T; // 테스트 케이스 수
cin >> T;
while (T--) {
int N;
cin >> N;
// ... 문제 로직
}
return 0;
}
2.3. STL (Standard Template Library) 소개
STL은 강력한 자료 구조와 알고리즘을 제공하여 코드를 간결하고 효율적으로 만듭니다.
std::vector: 동적 배열. 크기를 유연하게 조절할 수 있습니다.
std::vector<int> v = {1, 2, 3};
v.push_back(4); // [1, 2, 3, 4]
std::pair: 두 개의 값을 하나의 엔티티로 묶습니다. pii로 단축하여 사용할 수 있습니다.pii coord = {10, 20}; // x=10, y=20
cout << coord.first << ", " << coord.second;
std::sort: 배열이나 벡터를 정렬합니다. 매우 효율적입니다.std::vector<int> nums = {5, 2, 8, 1};
std::sort(nums.begin(), nums.end()); // [1, 2, 5, 8]
std::map / std::set: 키-값 쌍을 저장하거나 고유한 요소를 저장합니다. 내부적으로 균형 이진 트리를 사용하여 효율적인 검색, 삽입, 삭제를 제공합니다.