C++

    [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..

    [C++] valarray - 오직 수치값만 저장하는 컨테이너

    valarray 템플릿 클래스 - 수치값들이 들어있는 배열에 대한 연산을 지원하는 템플릿이다. - vector 나 array 클래스 또한 여러 종류의 수치값들을 리스트로 저장하는 컨테이너 템플릿 클래스이지만, valarray 처럼 모든 사칙연산을 지원하지는 않는다. - 헤더 파일에 정의되어 있다. - valarray 객체를 선언할 때, 수치값의 데이터형을 홑화살괄호()안에 기입하고, 앞에 식별자 valarray 를 붙인다. valarray 객체 선언 // Ex. dataType형 valarray 객체 arrayName 선언 예시 #include ... valarray arrayName; // 0개의 dataType형의 배열 arrayName valarray arrayName(n); // n개의 dataT..

    [LeetCode] 34 - Find First and Last Position of Element in Sorted Array

    lower_bound> 찾고자 하는 값의 첫 인덱스 upper_bound> 찾고자 하는 값보다 큰 첫 숫자의 인덱스 find 함수 활용해서 찾고자 하는 숫자가 있는지 확인 vector searchRange(vector& nums, int target) { auto begin = nums.begin(), end = nums.end(); int s = lower_bound(begin, end, target) - begin; int e = upper_bound(begin, end, target) - begin; if (find(begin, end, target) == end) return { -1,-1 }; return { s,e }; }

    [C++] 재귀함수 응용

    Sum 함수는 n이 횟수 Pow 함수는 cnt 횟수 #include using namespace std; int Sum(int* arr, int n) { if (n == 0) return 0; return *arr + Sum(arr + 1, n - 1); } int Pow(int val, int cnt) { if (cnt == 0) return 1; return val * Pow(val, --cnt); } int main() { int a[]{ 1,2,3,4,5 }; cout

    [골4] 17404 - RGB거리 2

    #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 #define MAX 1001 int main() { FAST_IO(); int col..

    [골4] 1405 - 미친 로봇

    #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 #define SIZE 4 double arrProb[SIZE]; double simple; int n..