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++ 문법들을 정리해 보았다.

반응형