본문 바로가기

전체 글

(195)
[자료구조] 스택 - 04 . 사칙 연산 계산기 [사칙 연산 계산기] [사칙연산계산기] =>사칙연산만으로 이루어진 식을 분석해서 풀어보려 한다. ex) 1+3.334 / (4.28*(110-2279)) =>해당 문제를 사람이 본다면 , 우선순위가 눈에 들어오겠지만 컴퓨터는 아니다! : 컴퓨터가 사용 할 도구 (알고리즘)을 제공해야 한다. =>알고리즘을 위한 과정은 이렇다 수식을 프로그램이 풀기 적당한 형식 (후위 표기법)으로 변환한다 . 변환된 수식을 프로그램이 계산한다 . [수식의 표기법] [전위 표기법 (Prefix Notation) ] =>연산자가 피연산자 앞에 위치한다 . 폴리쉬 표기법이라고도 한다. ex) 3+4 => +34 [중위 표기법 (Infix Notation) ] =>흔히 사용하는 표기법 .연산자가 피연산자 가운데에 위치한다 . ex..
[유니티] Line Renderer 로 움직이는 오브젝트를 연결하기 [Line Renderer] [Line Renderer] Line Renderer 컴포넌트는 3D 공간에서 두 개 이상의 지점 배열을 가져와 각각의 점 사이에 직선을 그리는 컴포넌트이다. 해당 라인 렌더러를 사용하여 움직이는 물체 사이를 이으려고 한다. [Positions] =>라인 렌더러 컴포넌트에는 positions 배열이 존재하는데 선을 이으는 점의 Vector3 배열이다. 해당 값의 0(시작) 과 1(끝)에 움직이는 오브젝트의 위치를 넣어 연결되는 선을 만드려 한다. [Use World Position] =>활성화하면 포인트가 월드 공간 좌표로 간주된다. 비활성화하면 이 컴포넌트가 연결된 게임 오브젝트의 트랜스폼에 속한다 [연결하기] [문제점] =>두 움직이는 오브젝트를 연결하려 Line Rend..
[자료구조] 스택 - 03 . 링크드 리스트로 구현하는 스택 [스택과 스택의 노드 표현하기] [노드] 링크드 리스트로 구현하는 스택의 노드는 자신의 위에 위치한 노드에 대한 포인터가 필요하다 . typedef struct tagNode { char* Data; struct tagNode* NextNode; }Node; =>데이터 필드가 char*이기에 문자열이 저장되어 있는 주소만을 담을 수 있어야 한다. 또한 해당 문자열은 자동 메모리가 아닌 자유 저장소에 저장 되어야 한다. [스택] typedef struct tagLinkedListStack { Node* List; Node* Top; }LinkedListStack; =>List 포인터는 스택이 기반하고 있는 링크드 리스트에 접근 =>Top 포인터는 최상위 노드에 대한 정보를 유지 [스택의 기본 연산 구현하기..
[자료구조] 스택 - 02 . 배열로 구현하는 스택 [배열로 구현하는 스택] [배열로 구현하는 스택] =>동적으로 스택의 용량을 조절하기 어렵다는 단점이 있다 . =>구현이 간단하다는 장점이 있다. =>배열기반의 스택은 각 노드를 동적으로 생성하고 제거하는 대신, 스택 생성 초기에 사용자가 부여한 용량만큼 노드를 한꺼번에 생성 , 최상위 노드의 위치를 나타내는 변수를 이용하여 삽입과 제거 연산을 수행한다. [스택과 스택의 노드 표현하기] [노드] =>스택의 각 층을 구성한다. =>데이터만 담는 구조체로 표현된다. (노드의 위치는 배열의 인덱스로 알 수 있어 뒷노드의 포인터는 필요 없다) typedef int ElementType; typedef struct tagNode { ElementType Data; }Node; [스택 구조체] =>배열 기반의 스택..
[자료구조] 스택 - 01 . 스택의 개념 [스택] [예시] =>좁은 주차장에서 가장 안쪽에 주차한 차는 앞의 모든 차가 빠져줘야 주차가 가능하다. [스택 (Stack)] =>스택(Stack)은 무언가를 쌓아놓은 "더미"를 뜻한다 . =>가장 먼저 들어간 것이 마지막에 빠지는 (First In , First Out (FIFO)) 구조를 가지고 있다. [스택의 사용 사례] =>변수의 수명주기가 끝나고 자동으로 변수를 제거하는 자동 메모리도 스택으로 구현되어 있다. (지역변수는 스택(자동 메모리)에 할당 된다.) =>대부분의 네트워크 프로토도 스택으로 구현되어 있다. [스택의 주요기능] [삽입] =>스택위에 새로운 노드(혹은 요소)를 쌓는 작업 . [제거] =>최상위 노드를 걷어내는 작업 .
[자료구조] 리스트 - 03 . 환형 링크드 리스트 <구현> [환형 링크드 리스트 구현] =>헤더 #ifndef CDLL #define CDLL #include #include typedef struct TagNode { int Data; TagNode* PrevNode; TagNode* NextNode; }Node; //생성 Node* CDLL_CreateNode(int _Data); //소멸 void CDLL_DestroyNode(Node* Destroy); //추가 void CDLL_AppendNode(Node** Head, Node* NewNode); //삽입 void CDLL_InsertNode(Node* Current, Node* NewNode); //출력 void CDLL_PrintNode(Node* Head); //역출력 void CDLL_Rever..
[자료구조] 리스트 - 03 . 환형 링크드 리스트 [환형 링크드 리스트] [환형 링크드 리스트] =>환형 링크드 리스트는 헤드의 앞 노드는 테일이며 테일의 뒷노드는 헤드이다. =>장점은 테일에 접근하는 비용이 거의 없는 것이 되어 , 노드를 추가할때 성능의 향상이 가능하다. [환형 링크드 리스트 주요 연산] =>환형 링크드 리스트의 주요 연산시 가장 신경 쓸 부분은 다음과 같다. 테일은 헤드의 "앞노드"이다 . 헤드는 테일의 "뒷노드"이다. 주요한 연산 추가 ,삭제를 살펴보겠다.이외의 연산은 DLL에서 본 것과 동일하여 생략하려 한다. [노드 추가] void CDLL_AppendNode(Node** Head,Node* NewNode) { if((*Head)==NULL)//헤드노드가 NULL인경우 { *Head=NewNode; *Head->NextNode..
[Behavior Designer] 09 . 변수 [shared variable] [shared variable의 필요성] =>BT의 장점은 Task 간의 연결이 느슨하여 유연하다는 점이다.즉 , 하나의 Task는 다른 Task에 의존하지 않는다. 그러나 정보를 공유하는 작업이 필요할때가 있다 . 기존의 Behavior Tree는 Black Board를 활용하여 이 문제를 해결 했지만 Behavior Manager 에셋은 shared variable(공유 변수)를 통해 해당 문제를 해결하였다. [shared variable] public SharedTransform target; =>앞서 시야각 안에 있는 대상을 쫒는 BT에서 공유 변수를 선언했다. =>해당 변수의 선언으로 Behavior Designer에서 변수를 생성하고 적용할 수 있다. =>이제 ..