C++

    [실1] 3019 - 테트리스

    #include #include #include #include #include #include #include using namespace std; using ll = long long; #pragma region 상하좌우 / 위치 const pair dir[] { { 1, 0 }, { -1, 0 }, { 0, -1 }, { 0, 1 }, }; #define _y first #define _x second #pragma endregion #pragma region 빠른 입출력 #define FAST_IO() \ {\ ios::sync_with_stdio(false);\ cin.tie(NULL); \ cout.tie(NULL); \ }\ #pragma endregion const map blocks { ..

    [C++] const map 객체에 [key] 접근시 에러

    map 클래스의 객체 a가 있고 이 객체가 const 화 되고 b라는 변수로 reference 됐다고 해보자. b에 대한 value 를 접근함에 있어 b["key"] 이런식으로 접근하면 에러가 난다. 내용은 error : passing '~' as 'this' argument discards qualifiers 이하 생략. 이유는 const 화 된 map 객체에 ["key"]로 접근하면 그 값을 수정할 여지가 발생하기 때문이다. value를 접근하는 다른 방법이 있다. 바로 .at를 쓰면 된다 b.at("key") 이렇게 접근하면 에러 없이 const화 된 map 객체의 value에 접근 가능하게된다. #include #include #include #include using namespace std; ..

    [C++] vector resize 시 주의할 점

    기존보다 더 작게 할당하게 될 경우 만약 1 라는 값을 5 개 가진 벡터를 3 의 크기로 resizing 하며 2 로 채운다면 #include #include using namespace std; void Print_Vec(const vector vec) { for (auto const &it : vec) { cout

    [LeetCode] 17 - Letter Combinations of a Phone Number

    class Solution { map digitComb { {'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"} }; vector res; string digits; public: void DFS(int i = 0, string curStr = "") { if (curStr.size() == digits.size()) { res.push_back(curStr); return; } for (auto& c : digitComb[digits[i]]) DFS(i + 1, curStr + c); } vector letterCombinations(string digit..

    [C++] 개인적인 (MST 알고리즘) 크루스칼 & 프림 구현

    사용할 데이터는 다음과 같다. 결과) 17 1 2 2 2 6 7 3 2 3 3 6 8 4 3 5 4 2 3 4 1 1 5 1 4 5 4 9 공통으로 쓰여짐 // 간선 개수 const int edge = 9; struct sNode { public: int from = 0, to = 0, weight = 0; /*sNode() = default; sNode(int from, int to, int weight) : from(from), to(to), weight(weight) { }*/ bool operator(const sNode& ref) const { return weight > ref.weight; } bool operator==(const sNode& ref) const { return from =..

    [C++] 배열을 함수의 매개변수로 사용 시 주의점

    Main함수로부터 scores[5] 배열을 넘겨받아 배열의 원소를 출력하는 PrintScore 함수를 살펴보자. void PrintScore(int scores[5], int size) { cout

    C++ 빌드 진행 과정

    C++에서 작성한 소스코드를 실행 가능한 실행 파일로 변환하기 위해서는, 일련의 4단계를 따른다. 먼저 #include / #define 같은 전처리기 매크로들을 처리하는 전처리( Preprocessing ) 단계 각각의 소스 파일을 어셈블리 명령어로 변환하는 컴파일( Compile ) 단계 어셈블리 코드들을 실제 기계어로 이루어진 목적 코드( Object File ) 로 변환하는 어셈블( Assemble ) 단계 마지막으로 각각의 목적 코드들을 한데 모아서 하나의 실행 파일로 만들어주는 링킹( Linking )단계로 나누어 진다. 대부분 전처리 단계 - 컴파일 단계 - 어셈블 단계를 모두 합쳐 컴파일 단계 하나로 생각해도 무방하다. 즉, 많은 경우 어셈블 명령어 같은 파일을 생성하지 않고 바로 목적 코..

    [C++] 삼항 트리를 이중 연결된 목록으로 변환

    삼항 트리가 주어지면, 제자리에서 이중 연결된 목록으로 변환한다. 삼항 트리는 각 노드가 왼쪽, 중간, 오른쪽으로 구분되는 세 개의 자식 노드를 갖는 트리 데이터 구조다. 변환은 삼항 트리 노드의 왼쪽 자식 포인터가 이중 연결된 목록 노드의 이전 포인터 역할을 하고 오른쪽 자식 포인터가 이중 연결된 목록 노드의 다음 포인터 역할을 하고 중간 트리 노드가 자식 포인터는 아무 것도 가리키지 않아야 한다. 변환은 이중 연결된 목록의 노드에 추가 메모리를 할당하지 않고 삼항 트리 노드 포인터만 교환하여 수행해야 한다. Input: Ternary Tree 1 / | \ / | \ / | \ 2 9 12 / | \ / \ | \ 3 6 8 10 11 13 16 | \ / \ | 4 7 14 15 17 \ 5 Out..

    [C++] 두 배열을 비교할 수 있는 함수 equal

    1. equal C++의 알고리즘 관련 여러 함수들이 담긴 헤더 에서의 equal 함수는 다음과 같은 두 가지 구조를 가진다. 1] equality - bool equal (InputIterator first1, InputIterator last1, InputIterator first2) 2] predicate - bool equal (InputIterator1 first1, InputIterator last1, InputIterator first2, BinaryPredicate pred) equal은 쓰임에 따라 3개 혹은 4개의 인자를 받는다. InputIterator first1 : 비교할 첫 번째 배열이나 어떤 container 자료형의 시작부 혹은 포인터 InputIterator last1: 비..

    [Unreal] Level Blueprint 를 C++로 접근하기

    기본적으로 Level Blueprint는 ALevelScriptActor, 즉 Actor 형식이다. 이를 상속받아 새로운 Level Actor를 생성한다. 자신의 LevelScriptActor에서 추가한 함수가, Level Blueprint에서도 보일 수 있게 수정할 수 있다. 다음은 Actor들의 Reference를 받아 Destroy 시키는 DestroyActors 함수이다. 자신의 LevelScriptActor에서 작성한 함수가 Level Blueprint에서 보이려면 UFUNCTION과 Specifier 작성 필수이다. 눈에 띄는건 DestroyActors의 UPARAM(ref) 이라는 매크로인데, 이는 함수가 받는 인자가 Blueprint 상에서는 왼쪽 에서 와야 한다는 뜻이다. ( -> 즉 U..