C++ 4

[UE5] Is casting expensive?

전투 시스템을 구현하는데 처음에는 ACharacter를 상속받은 주인공 Character 대상으로 공격 판정을 하다가,또 다른 ACharacter를 상속받은 Monster가 공격 판정 대상에 추가되었으며, 최근에는 AActor를 상속받은 Weapon까지 공격 판정에 추가되었다.그러다보니 공통되는 기능을 통합하여 코드 양을 줄임에 따라 상속과 캐스팅을 할 일이 많아졌는데,한가지 핵심 기능을 갖는 함수 하나를 중복 코드 없이 통합할 수 있는 대신, 캐스팅이 1-2회 늘어나는 Trade-Off 상황이 생겼다. 내가 언리얼 엔진 C++을 처음 배울 때만 해도 Cast는 비싼 연산이고, 가능하다면 최대한 줄이거나 최초 1회 실행시 가능한 캐싱하여 쓰도록 배웠는데, 이참에 캐스팅에 대해 Forum, Reddit, ..

UE5 2024.07.16

[C++] Quick Sort

[C++] 퀵 정렬 일반적인 경우 단일 정렬 알고리즘 중 가장 빠른 정렬  [ 작동원리 ]Partition의 기준점인 Pivot이 존재간단히 Pivot을 left로 설정해서 생각해보자.Pivot = leftlow = left + 1high = right - 1단계pivot >= arr[low]일 동안 low를 오른쪽으로 이동: pivot보다 큰 값을 만날 때까지 low를 오른쪽으로 이동pivot : pivot보다 작은 값을 만날 때 까지 high를 왼쪽으로 이동 - 2단계low  ... 다시 1단계로 - 3단계low와 high가 교차되는 상황이 온다high 결과 : pivot의 위치는 확정됨 ! (정렬된 자리를 찾음)pivot을 기준으로 왼쪽에는 더 작은 숫자, 오른쪽에는 더 큰 숫자가 오게 됨.자리를 ..

[C++] Merge Sort

[C++] 병합 정렬 (또는 합병 정렬) 1945년 폰 노이만에 의해 개발됨. 분할 정복 (Divide and Conquer)를 이용한 정렬 알고리즘분할 (Divide) : 문제를 더 단순하게 분할정복 (Conquer) 분할된 문제를 해결결합 (Combine) 결과를 취합하여 마무리  처음 MergeSort() 내에서, 원소가 1개가 될 때 까지, 즉 경계를 의미하는 left와 right가 같아질 때 까지 재귀적으로 쪼갠다.1개가 되면, 그 때 부터 개별적으로 정렬한 뒤, 원래 배열에 정렬된 부분을 넣으며 합친다.  절반 씩 쪼갤 때 O(log N), 다시 합칠 때 총 N개를 합치므로 O(N)으로 총 O(N log N)의 시간 복잡도를 가진다.그러므로 최선, 평균, 최악의 시간 복잡도 O(N log N)..

[C++] Heap Tree

Heap Tree, Priority Queue when ?데이터들 중 가장 큰 값 또는 가장 작은 값을 계속해서 추출해야 하는 필요성이 있을 때 사용 [ 구조 ]우선은 이진 트리의 형태를 갖는다. (각 노드가 최대 2개의 자식 노드를 갖는 트리)힙 트리의 구조를 유지하기 위해서 2가지 규칙이 존재한다. (공식용어는 아님) ( 규칙 1 )[부모 노드]가 가진 값은 항상 [자식 노드]가 가진 값보다 커야함. (Predicate에 따라 다름): 위 조건만 만족한다면 어떻게든 괜찮다 (이진 탐색 트리보다 조건이 느슨함)( 규칙 2 )마지막 레벨을 제외한 모든 레벨에 노드가 꽉 차 있어야 함. (완전 이진 트리)마지막 레벨에 노드가 있을 때는, 항상 왼쪽부터 순서대로 채워야 함.위 2가지 구조를 통해 알 수 있는..