자료구조) 이중 연결 리스트 (Double Linked List) - 1
·
Programming/자료구조 & 알고리즘
이중 연결 리스트기존의 방법(단일 연결 리스트)으로 리스트의 데이터를 찾으려면 링크를 타고, 타고, 타고 내려가서 맞는게 나올때까지 들어가야 했다.이 방법을 어떻게 개선할 수는 없을까?그림처럼 노드를 두 개로 만들면 된다. 이전 노드의 주소를 저장하는 노드(PrevNode)와 다음 노드의 주소를 저장하는 노드(NextNode).이제 우리는 양방향으로 데이터를 찾을 수 있게 되었다.이 방식의 장점은 단일 연결 리스트에 비해 접근이 빠르다는 점이다. 예를 들어 1000개의 데이터 중 900번째 데이터에 접근해야 한다면 단일 연결 리스트는 900번 이동해야 하지만, 이중 연결 리스트는 꼬리부터 100번 움직이면 접근할 수 있다. 이중 연결 리스트에 다른 노드를 연결은 어떻게 할 수 있을까? 맨 처음 상태이다...
게임수학) 벡터 - 2
·
Programming/기타
벡터 연산덧셈, 뺄셈, 교환법칙, 결합법칙기하벡터의 경우에는 시각적으로 벡터를 보여줄수 있으므로, 기초적인 연산법칙이 성립한다는 것을 보여주는것도 쉽다. 우리가 고등학?생때 배웠었던 덧셈, 뺄셈, 교환법칙, 결합법칙을 벡터에서도 성립한다는 것을 그림을 통해 알 수 있다.증명은 생략하고 대신 설명을 한번 해보자. 교환법칙이란 a + b를 순서를 바꿔서 b + a로 표기해도 성립한다는 내용이다. 그림에서는 좌상단에 해당한다.벡터 b와 크기는 같으나 방향이 정반대인 벡터를 역벡터 -b로 정의하는데, 우상단에 해당한다.원본 벡터와 그 역벡터를 더하면 영벡터가 된다. 우상단 그림에서 b와 -b벡터가 합이 0이 되는것을 확인할 수 있다.마지막으로 (a + b) + c = a + (b + c)와 같이 괄호의 위치를 ..
자료구조) 연결 리스트(Linked List)
·
Programming/자료구조 & 알고리즘
가변형 배열에 대하여연결 리스트는 자료구조를 공부할 때 가장 먼저 나오는 자료구조이다.이 리스트라는 이름에서 유추 가능한 것처럼 목록 형태로 이루어진 데이터 형식을 의미한다. 왜 연결 리스트를 사용하는가?데이터가 고정되어 있다면, 즉 수가 정해져 있다면  = 당연히 배열을 사용하면 된다.예를 들어 이 맵에 라이트가 4개 정도 배치될 것이다 라고 한다면 Light light[4]; 처럼 사용하면 된다.혹은 array light(4) 같은 식으로 말이다. 그러나 일반적인 배열로는 IEnumerator를 다룰 수 없다. 무슨 소리냐면, 배열이 늘었다, 줄었다 하는 상황을 컨트롤 할 수 없다는 것이다. 수가 한정된 상황이라면 제어가 가능할 수도 있지만, 대부분의 상황은 그런식으로 흘러가지 않는다. 따라서 가변형..
게임수학) 벡터 - 1
·
Programming/기타
벡터의 정의위치 벡터벡터란 무엇일까... 사실 우리는 이미 벡터에 대해 살짝 알고 있다.이전 포스트에서 3D좌표계를 다룰 때 (x, y, z)와 같이 배열을 좌표라고 부르면서 특정한 위치를 가리키는 데 사용했었다.유니티에서는 이러한 좌표를 Vector3() 메서드를 이용하여 표현한다. 이러한 위치로서의 벡터를 위치 벡터라고 한다.Vector3는 이러한 세 개의 x, y, z 프로퍼티를 통해 3차원 공간의 점을 표현할 수 있다.이러한 벡터를 수학적으로 표현하려면 (x, y, z)처럼 옆으로 나열한 행벡터로도 표현이 가능하지만,그림처럼 세로로 나열한 열벡터로도 표기가 가능하다.위치벡터는 어디까지나 점의 위치를 나타낼 뿐, 만약 벡터가 위치한 공간 자체가 움직인다면 그 위치 또한 움직이게 된다.박스 위에 원이..
C#) C#에서의 배열 사용 방법
·
Programming/C C# C++
C#에서는 배열을 선언할 때 기존에 C와 C++에서 했던 방법과는 달리 자료형 바로 뒤에 대괄호를 붙이게 된다.int[] type;이런 식으로 말이다. 만약 2차원 배열이나 그 이상의 배열을 필요로 한다면,int[,] types;이런 식으로 콤마를 입력해서 차원 수를 늘릴 수 있다. 이 배열에 값을 할당하는것은 일반적으로 배열에 값을 할당하는 것처럼 선언과 동시에 초기화하면 되지만, 이미 선언된 배열에 값을 할당하는 경우 new 키워드를 사용하여 대입해야 한다. string[] languages;languages = new string[] {"C#", "C++"}; //문자 자체를 대입하는 방식languages = new string[9]; //배열의 개수만 대입하는 방식 그 외 사용법은 기존의 방식과 ..
게임수학) 좌표계 - 2
·
Programming/기타
극좌표계이전 포스트에서 설명했었던 좌표계는 직교좌표계라고 하는 좌표계였다. 이 직교 좌표계와 다른 방식으로 물체의 위치를 표현하는 좌표계도 존재하는데, 그중 대표적인 극좌표계에 대해서 설명해보겠다. 극좌표계는 크게 2D와 3D로 구분할수 있다. 먼저 2D좌표계를 한번 알아보자.  마치 단위원처럼 생겼다는 것을 알 수 있다. 2D 극좌표계에도 직교좌표계처럼 중심에 극(Pole)이라고 불리는 기준점이 존재한다. 이 극에서 반지름처럼 극축이라고 불리는 반직선이 뻗어나오게 된다. 이 극좌표계에서 평면상의 점 P의 위치를 결정하는 방법은 극축과 P를 연결하는 직선 r의 길이와 극축과 r의 각도 θ를 통해 결정된다. 즉, 점 P의 극좌표는 (r, θ)가 된다는 것이다. 이 극좌표계라는 것은 보통 항공기나 선박의 네..