algorithm
[C++] 코딩테스트 대비용 알아두면 유용한 문법 정리
걍판자
2025. 1. 12. 22:01
반응형
서문
학교에서 알고리즘 수업을 듣는데 이해가 안 되는 부분은 GPT가 짠 예시 코드를 보면서 해결했다. 그런데 그 과정에서 GPT는 곧잘 쓰지만 나는 잘 쓰지 않았던 문법들이 있어서 정리해 보았다. 코딩테스트에서 유용하게 쓰일 것이다.
자료구조 <자료형>
- 자료구조 안에 자료형을 명시한다. 자료'구조'와 자료'형'의 차이 때문에 매번 어디에 어떤 게 들어가야 할지 자주 헷갈렸던 문법이다.
- 자료구조 안에 자료형을 명시한다.
- 예를 들어 vector<int>는 정수형 벡터이다.
-
vector<vector<int>> matrix; // 2차원 정수 벡터
static_cast
- 이런 자료형은 static_cast로 형을 변환할 수 있다.
- 문법: static_cast<바꾸려는 자료형>(바뀌는 변수명)
- 예:
double num = 3.14; int intNum = static_cast<int>(num); // num을 int로 변환
nullptr
- 포인터를 초기화 하거나 할 때 null을 넣었는데 왜 안되지 싶어 헤맨 적이 있었다.
- C++에서는 null 대신 nullptr을 사용해 더 명확하고 안전한 포인터 초기화 방식이 된다.
콜론 :
- 콜론(:) 초기화 문법은 매번 나올때 마다 이게 뭔지 헷갈렸었다.
- 클래스의 멤버 변수를 초기화할 때 사용된다.
- 주로 생성자에서 초기화 리스트로 사용.
- 예:
struct TreeNode { int value; TreeNode* left; TreeNode* right; TreeNode(int x) : value(x), left(nullptr), right(nullptr) {} }; TreeNode node(42); // value는 42, left와 right는 nullptr로 초기화
- 이외에도 goto와 라벨링 문법에도 쓰인다
- 코드 흐름을 특정 위치로 점프.
- 가독성과 유지보수에 불리하므로 일반적으로 권장되지 않는다.
- 예:
int i = 0; start: if (i < 5) { cout << i++ << endl; goto start; }
auto 문법
- for (auto& a : list) 와 같이 for문과 함께 쓰이는 경우가 많다.
- auto 자체는 자료형을 컴파일러가 알아서 처리하는 것으로 위의 코드를 보면 list의 원소들이 자료형이 다른 경우 그걸 a로 불러오는데 auto로 가져와서 알아서 자료형 상관없이 처리하게 하는 것이다.
- 범위 기반 for 문으로, 리스트의 요소를 반복 처리.
- auto&는 요소를 참조로 가져와 수정 가능.
- 예:
vector<int> nums = {1, 2, 3}; for (auto& num : nums) { num *= 2; // nums의 요소를 직접 수정 }
더블 콜론
- :: (더블 콜론), 말 그대로 콜론을 2개 쓴 문법이다.
- 특정 네임스페이스의 함수나 변수를 명시적으로 사용된다.
- 예:
namespace Math { int add(int a, int b) { return a + b; } } int result = Math::add(3, 5); // Math 네임스페이스의 add 함수 호출
-
- 코드 간소화를 위해 using namespace를 사용할 수 있지만, 이름 충돌 가능성 있다.
- 파이썬의 import와 비슷한 느낌이다.
구조체와 참조 계산
- 구조체와 참조 계산
- 구조체를 정의하고 참조로 전달하여 거리 계산 등 연산 수행한다.
- 아래와 같이 구조체를 참조한다면, 여러 구조체를 만들어도 값만 return 되는 게 아니라 실제로 그 구조체의 값이 바뀌기에 효율적인 코딩이 가능하다.
struct Point {
int x, y;
};
double distance(const Point& p1, const Point& p2) {
return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}
unordered_map
- 순서 없는 키-값 저장소로 Python의 dict와 유사하다.
- 아래와 같이 vector문법과 함께 쓰면 여러개를 대응해 저장할 수도 있다.
unordered_map<char, vector<char>> adj;
adj['a'] = {'b', 'c', 'd'}; // 'a'를 키로, {'b', 'c', 'd'}를 값으로 저장
결론
내가 보기 위해 잘 안쓰지만 쓰면 좋은 C++ 문법들을 정리해 보았다.
반응형