분류 전체보기149 [C++] value(lvalue, rvalue, xvalue)와 레퍼런스(&) 서론https://k99812.tistory.com/151 [C++] 좌측값과 우측값 그리고 Move, Forward 함수좌측값과 우측값 L-value이름이 있고 메모리 주소가 있는 값 R-value일시적인 값, 임시 객체 또는 계산 결과 등int x = 10; // x는 lvalue, 10은 rvalueint y = x + 5; // y는 lvalue, (x + 5)는 rvalue C++ remove_reference_t 함k99812.tistory.com 지난 글에서 좌측값과 우측값에 대해 글을 작성했었다. 하지만 여기서 쓴 예전 좌측값 우측값 개념으로는move함수와 move semantics를 이해하는데 어려워 다시한번 글을 쓰게됐다. 지난글에는 move, forward, universal refe.. 2025. 6. 19. [알고리즘] CCW를 이용한 선분교차 판정 CCW CCW는 외적을 이용해 한 백터(v1)를 기준으로 다른 백터(v2)가 어디 방향에 존재하는지 알 수 있다. 백터의 외적 결과값(음수 or 양수)을 쉽게 알기 위해선 오른손 법칙을 사용할 수 있다.오른손 법칙은 검지손가락(a 백터)를 기준으로 외적하는 다른 백터(b)를 중지 손가락으로 가르키면엄지 손가락의 방향에 따라 엄지손가락이 위(하늘)를 가르키면 양수 아래(바닥)를 가르키면 음수가 된다 ex) 위의 그림을 기준으로 검지 손가락(a)을 v1에 맞추고 중지 손가락을 v2 백터를 가르키게 하면엄지손가락이 바닥을 가르켜 음수인걸 알 수 있다 백터 v1을 $ v1 = \left ( x1, y1 \right ) $ 백터 v2를 $ v2 = \left ( x2, y2 \right ) $ 일때$$ v1 \t.. 2025. 6. 12. Project_P 몬스터 AI 개선(행동트리 테스크를 활용하여 몬스터 회전) 문제점 기존에는 몬스터의 이동방향으로 회전을 Pawn의 옵션인 Orient Rotation to Movement를 활성화 하여 회전을 시켰다.그러다 보니 다음과 같은 문제점이 생겼다.AIPerception 컴포넌트가 AIController에 달려있다행동트리에서 언리얼에서 제공해주는 MoveTo 테스크를 Vector로 이동시 AIContorller의 로테이션값이 바뀌지 않는다MoveTo 테스크를 Actor로 이동하면 AIController의 로테이션값이 바뀐다위의 문제들로 인하여 AIPerception의 시야감각의 포지션이 처음 몬스터가 바라본 곳으로 고정된다 이로 인해 행동트리에서 MoveTo로 이동하기 전 이동 백터로 회전시키는 테스크를 추가했다. Monster 설정 AIController가 몬스터의 .. 2025. 6. 4. Project_P AI Perception Damage Sense 적용 Damage Sense기존 몬스터 AI는 몬스터 뒤로 몰래 다가가 때려도 바보처럼 맞기만 했다.그래서 AI Perception에서 제공하는 Damage Sense를 활용하여 몬스터가 공격당하면 플레이어를 감지할 수 있도록구현 해보았다. Damage Sense 생성APPAIController 헤더파일virtual void PerceptionSensedDamage(APawn* Pawn_);UPROPERTY(VisibleAnywhere)TObjectPtr SenseConfig_Damage; virtual void PerceptionSensedDamage(APawn* Pawn_);ActorPerceptionUpdated 함수에 들어온 FAIStimulus이 Dmage일경우실행할 함수TObjectPtr Sense.. 2025. 5. 30. [자료구조] 세그먼트 트리 세그먼트 트리 세그먼트 트리는 연속적으로 존재하는 데이터에 대해 질의(query)를 통해 특정 구간의 값을 구하고데이터를 변경(update)할 수 있는 자료구조이다. 구간 합을 구하는 누적합(Prefix Sum)은 데이터 변경을 할 수 없지만 세그먼트 트리를 이용해 구간 합을 구하면데이터 변경이 가능하다. 또한 구간 합 말고도 구간 곱, 구간 최대·최소 등을 구할 수 있다. 트리의 성질 노드의 인덱스가 1부터 시작하는 이진트리의 부모노드 자식노드 구하기부모 노드부모 노드 = n / 2자식노드왼쪽 자식왼쪽 자식 = n * 2오른쪽 자식오른쪽 자식 = n * 2 + 10부터 시작하는 이진트리의 부모노드 자식노드부모 노드부모 노드 = (n - 1) / 2자식 노드왼쪽 자식왼쪽 자식 = n * 2 + 1오른쪽.. 2025. 5. 23. [백준 2877] C++ 4와 7 문제https://www.acmicpc.net/problem/2877 풀이while (n > 0){ if (n % 2 == 0) { ret += "7"; } else { ret += "4"; } n = (n - 1) / 2;} n을 % 2를 해 홀수면 4, 짝수면 7을 추가한다 그러면 해당 코드는 아래 그림처럼 동작한다 n = (n - 1) / 2 부모노드의 번호를 구하여 부모노드로 이동한다ex) n = 4 이면 str에 7, 4 순으로 들어가게된다그 이유는 부모 노드부터가 아니라 역순으로 자식에서 부모순으로 탐색한다그래서 reverse를 해줘야 된다 전체 코드#include#include#includeusing namespace std;int n;int main(){ cin >> n; strin.. 2025. 5. 16. [C++] 좌측값과 우측값 그리고 Move, Forward 함수 좌측값과 우측값 L-value이름이 있고 메모리 주소가 있는 값 R-value일시적인 값, 임시 객체 또는 계산 결과 등int x = 10; // x는 lvalue, 10은 rvalueint y = x + 5; // y는 lvalue, (x + 5)는 rvalue https://k99812.tistory.com/157 [C++] lvalue, rvalue, xvalue서론https://k99812.tistory.com/151 [C++] 좌측값과 우측값 그리고 Move, Forward 함수좌측값과 우측값 L-value이름이 있고 메모리 주소가 있는 값 R-value일시적인 값, 임시 객체 또는 계산 결과 등int x = 10; // x는k99812.tistory.com기존의 우측값 좌.. 2025. 5. 13. [백준 11266] C++ 단절점 DFS 문제https://www.acmicpc.net/problem/11266 풀이int dfs(int now, bool isRoot){ visited[now] = ++cnt; int ret = visited[now]; int child = 0; for (const int& next : graph[now]) { if (parent[now] == next) continue; if (visited[next]) { ret = min(ret, visited[next]); continue; } child++; parent[next] = now; int low = dfs(next, false); ret = min(ret, low); if (!isRoot && low >= visited[now]) .. 2025. 5. 7. C++ 그래프의 사이클 노드 찾기 사이클 노드 찾기https://k99812.tistory.com/147 [백준 11400] C++ 단절선 DFS문제https://www.acmicpc.net/problem/11400 풀이int dfs(int start){ visited[start] = ++cnt; int ret = visited[start]; for (const int& next : graph[start]) { if (parent[start] == next) continue; if (visited[next]) { ret = min(ret, visited[next]); continuek99812.tistory.com 위의 문제의 코드를 바탕으로 코드가 진행된다 vector visited, parent, inStack;int dfs(int .. 2025. 5. 7. 이전 1 2 3 4 ··· 17 다음