[C++, 자료구조] 덱(Deque)
·
C++/자료구조
■ 덱(Deque)스택은 같은 한쪽(Top)에서 데이터를 넣고 빼는 구조였고, 큐는 뒤에서 데이터를 넣고 앞에서 데이터를 꺼내는 자료구조였다.덱은 앞으로도 뒤로도 넣을 수 있고, 앞으로도 뒤로도 뺄 수 있는, 스택과 큐의 특성을 모두 갖추고 있는 자료구조이다.Deque는 ‘디큐’로 읽기 쉬운데, 이러면 큐의 Dequeue연산과 발음이 같아져 “덱”으로 발음한다Double-Ended Queue의 줄임말이다.▶ 덱의 추상 자료형덱의 특성을 살펴봤으니, 이번엔 덱의 추상 자료형에 대해 살펴보자.정의설명void InitDeque(Deque* dq)덱의 초기화를 진행한다. 덱 생성 후 가장 먼저 호출한다.bool IsEmpty(Deque* dq)덱이 빈 경우 ture, 그렇지 않은 경우는 false를 반환한다.v..
[C++, 자료구조] 큐(Queue)
·
C++/자료구조
■ 큐(Queue)앞서 스택(Stack)은 먼저 들어온 것이 나중에 나가는 “선입후출(FILO)” 구조를 지녔다. 그리고 이걸 “쌓여있는 접시”, “프링글스 통 안의 감자칩”에 비유했었다, 반대로 큐(Queue)는 “줄을 서 있는 사람들”처럼 먼저 들어온 것이 먼저 나가는 “선입선출(FIFO)”의 구조를 지닌다.큐의 개념은 일상생활에서도 쉽게 찾을 수 있다. 고무호스, 터널, 극장표 예매처 등은 모두 큐의 동작 방식과 유사한 구조이다.▶ 큐의 추상 자료형스택과 마찬가지로 큐의 추상 자료형도 정형화된 편이다.enqueue : 큐에 데이터를 넣는 연산.dequeue : 큐에서 데이터를 빼는 연산. 정의 의미 void InitQueue(Queue* pq)큐의 초기화를 진행한다.bool IsEmpty(Queu..
[Unity, C#] SOLID 원칙
·
Unity,C#/Unity 정보
■ SOLID 원칙프로그래밍에서 널리 사용되는 디자인 패턴(Design Patterns)은 Gang of Four(GOF) 라 불리는 4명의 저자가 정리한 책에서 시작되었다. 디자인 패턴을 공부해본 사람이라면 알겠지만, 대부분의 책은 SOLID 원칙부터 소개하고, 대부분의 디자인 패턴 역시 이 SOLID 원칙을 준수하도록 설계되어 있다. ▶ SOLID 원칙Single responsibility : 단일 책임 원칙Open-closed : 개방-폐쇄 원칙Liskov substitution : 리스코프 치환 원칙Interface segregation : 인터페이스 분리 원칙Dependency inversion : 의존 역전 원칙위 5가지 원칙의 앞 글자를 따서 “SOLID” 원칙이라 부른다. 물론 실제 프로그..
[Unity] UI Toolkit 기본 사용법
·
Unity,C#/Unity 정보
■ UI ToolkitUI Toolkit은 Unity 2022.2 이후 유니티의 기존 UGUI(Canvas 기반 UI)를 대체할 수 있도록 개발된 새로운 공식 UI 시스템이다. 기존 UGUI는 GameObject 기반으로 동작하는 UI 시스템으로 드래그 앤 드롭을 통한 직관적인 UI 제작이 가능하다. 또한 하이어라키 구조와 Canvas의 SortOrder를 이용해 UI의 렌더링 순서를 제어할 수 있다.UGUI는 편리하고 직관적인 반면에 아래와 같은 뚜렷한 단점도 존재한다.구분단점 GameObject 기반 UGUI의 모든 UI요소는 GameObject + Component 로 구성된다. → 따라서 많은 UI요소가 있으면 UpdateLoop, Transform 갱신 등 CPU 오버헤드와메모리 사용량이 커..
[C++, 자료구조] stack의 응용 : 계산기 프로그램
·
C++/자료구조
■ stack의 응용 : 계산기 프로그램$$ 1 + (2+3) / 4 $$스택을 사용하여 계산기를 구현해 보자. 계산기는 아래의 두 가지를 고려해서 연산을 진행할 수 있어야 한다.소괄호를 파악하여 그 부분을 먼저 계산한다.연산자의 우선순위를 근거로 연산의 순위를 결정한다.물론 스택만 사용해서 구현할 수 있는것은 아니고 별도의 알고리즘이 존재하며 이를 활용해야 계산기 프로그램을 만들 수 있다.▶ 전위(prefix), 중위(infix), 후위(postfix) 표기법먼저 수식을 이루는 피연산자가 한자리 숫자로만 이뤄진다고 가정해 보자. 전위, 중위, 후위 표기법은 수학식에서 연산자(operator)를 피연산자(operand) 들 사이 어디에 두느냐에 따른 표기 방식의 차이를 말한다.중위 표기법 (Infix N..
[C++, 자료구조] 스택(Stack)
·
C++/자료구조
■ 스택(Stack)스택(Stack) 자료구조는 실 생활에서도 자주 볼 수 있는 상황으로 예를 들 수 있다. 쌓인 상자나 프링글스 통 안의 감자칩처럼, 가장 아래에 있는 물건을 꺼내기 위해선 그 위에 있는 물건을 먼저 꺼내야 한다. 따라서 스택은 “가장 나중에 들어간 것이 가장 먼저 나온다.(LIFO : Last-In, First Out)” 라는 후입선출 방식의 자료구조이다. ▶ 스택의 추상 자료형앞서 살펴본 리스트 자료구조의 추상자료형은 필요에 따라 정의 내용이 차이가 있었다. 하지만 스택의 추상 자료형은 상대적으로 정형화된 편이다. 한쪽이 막혀 있는 프링글스 통을 가지고 할 수 있는 일을 정리해 보면 아래와 같다.프링글스 통에 감자칩을 넣는다 : push프링글스 통에서 감자칩을 꺼낸다 : pop제일 ..
[게임수학] 9-3. 외적(3) - 삼중곱
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.■ 삼중곱벡터의 외적과 내적을 두 번 연속 사용하는 연산을 삼중곱(Triple product)이라 한다.삼중곱 식을 세우려면 3개의 벡터$(\vec u, \vec v, \vec w)$ 가 필요하며, 순서에 따라 다음과 같은 경우의 수가 생긴다.$\vec u\cdot(\vec v \cdot \vec w)$$\vec u\cdot(\vec v \times \vec w)$$\vec u \times (\vec v\cdot \vec w)$$\vec u \times (\vec v\times \vec w)$이 중, 1번 연산은 괄호 안의 내적 값은 스칼라가 되어 벡터를 세 번 곱했다고 보기 어렵고, 3번 연산은 벡터와 스칼라의 외적은 불가능하다.따라서 2번과 ..
[게임수학] 9-2. 외적(2) - 카메라의 회전 행렬, 로드리게스 공식
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다. ■ 벡터로부터 회전행렬 생성위와 같이 3차원 공간에서 좌우로 기울어지지 않는 카메라가 아래에 위치한 물체를 바라보고 있는 상황을 설정해 보자.앞서 다룬 오일러 각 방식을 사용해 카메라의 회전을 지정할 수 있지만, 외적을 사용하면 카메라의 시선 벡터로부터 3개의 로컬 축을 구하고 이를 통해 회전 행렬을 얻어낼 수 있다. 1. 카메라의 로컬 z 축 계산물체의 위치에서 카메라의 위치를 뺀 후 크기를 1로 정규화시킨 벡터$\vec v$를 생성하면, 이 벡터는 카메라 트랜스폼의 로컬 $z$축이 된다. 2. 카메라의 로컬 x, y 축 계산월드 공간의 $y$축 벡터를 $\vec u$로 표시하고, 앞서 구한 로컬 $z$축과 외적 한 후 정규화시키면 카메라의..
[게임수학] 9-1. 외적(Cross product)
·
게임수학
→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다. ■ 벡터의 외적(Cross product)벡터의 외적(Cross product)은 내적과 달리 오로지 3차원 공간의 벡터에만 사용 가능한 연산이다.벡터의 외적은 $\times$기호를 사용하며, 두 3차원 벡터 $\vec u, \vec v$의 외적 결과는 아래와 같다.$$ \vec u = (u_x, u_y, u_z) \ \ \ \vec v = (v_x, v_y, v_z) \\ \vec u \times \vec v = (u_yv_z - v_yu_z, u_zv_x -v_xu_z,u_xv_y -v_xu_y) $$[두 벡터의 외적 결과]두 3차원 벡터의 외적 결과는 언제나 3차원 벡터이다.계산식 패턴은 $x$성분의 결과를 만들기 위해 관련없는 나머지 두..