Tag Archives: 프로그래밍

C++로 쉽게 풀어쓴 자료구조/ 이진 탐색 트리

이진 탐색 트리

탐색이란?

컴퓨터 프로그램에서 탐색은 레코드(record)의 집합에서 특정한 레코드를 찾아내는 작업을 의미한다.

레코드는 하나 이상의 필드(field)로 구성된다. 예컨대 학생의 레코드는 이름, 주소, 주민등록번호 등의 필드들로 이루어진다. 일반적으로 레코드들의 집합을 테이블(table)이라고 한다.

레코드들은 보통 키(key)라고 불리는 하나의 필드에 의해 식별할 수 있다. 키는 서로 중복되지 않는 고유한 값을 가지는데, 키를 사용하면 각각의 레코드들을 구별할 수 있다. 이러한 키를 주요키(primary key)라고 한다.

Continue reading

C++로 쉽게 풀어쓴 자료구조/ 트리

트리(Tree)의 개념

트리는 계층적인 자료를 표현하는데 이용되는 자료구조이다.

인공지능 문제에서도 트리가 사용되는데, 대표적인 것이 결정 트리(decision tree)이다. 결정 트리는 인간이나 컴퓨터의 의사결정 구조를 표현하는 한 가지 방법이다.

트리의 용어들

트리의 구성 요소를 노드(node)라고 한다. 트리는 한 개 이상의 노드로 이루어진 유한 집합이다. 이들 중 하나의 노드는 루트(root) 노드라 불리고 나머지 노드들은 서브트리(subtree)라고 불린다. 아래 그림에서 계층적인 구조에서 가장 높은 곳에 있는 노드인 A가 루트가 된다.

트리에서 루트와 서브트리는 선으로 연결된다. 이 연결선을 간선 또는 엣지(edge)라고 한다.

Continue reading

C++로 쉽게 풀어쓴 자료구조/ 순환

순환(Recursion)의 소개

순환이란 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. (재귀는 초기항과 수열을 이루는 규칙을 통해 수열을 간결하게 표현할 수 있는 점화식의 개념을 컴퓨터에서 구현한 것과 같다.)

순환 호출의 내부적인 구현

프로그래밍 언어에서 하나의 함수가 자기 자신을 다시 호출하는 것은 다른 함수를 호출하는 것과 동일하다. 즉, 복귀주소가 시스템 스택에 저장되고 호출되는 함수를 위한 파라미터와 지역 변수를 스택으로부터 할당 받는다. 이러한 함수를 위한 시스템 스택에서의 공간을 활성 레코드(Activation Record)라고 한다.

이러한 준비가 끝나면 호출된 함수의 코드 시작 위치로 이동하여 수행을 시작한다. 만약 호출된 함수가 자기 자신이라면 자기 자신의 시작 위치로 점프하게 되는 것이다. 혼출된 함수가 끝나게 되면 시스템 스택에서 복귀주소를 꺼내 자신을 호출한 함수로 되돌아간다. 순환 호출이 계속 중첩될 수록 시스템 스택에는 활성 레코드들이 쌓이게 된다.

Continue reading

C++로 쉽게 풀어쓴 자료구조/ 리스트

리스트(List)의 추상 자료형

리스트란

리스트 (또는 선형 리스트)는 항목들이 차례로 정리된 선형 자료구조를 의미한다. 순서가 있기 때문에 리스트는 집합과 다르다.

리스트는 스택이나 큐와 달리 중간에 데이터를 삽입하거나 삭제할 수 있다. 대신 그만큼 구현시에 고려해야 할 점들도 많다.

Continue reading

C++로 쉽게 풀어쓴 자료구조/ 포인터와 연결 리스트

포인터(Pointer)

포인터의 개념

컴퓨터에게 CPU와 Memory는 핵심 요소이고, 모든 메모리는 주소를 갖는다. 포인터는 그 메모리의 주소를 가리키는 변수를 의미한다. 보통 그 주소에는 다른 변수가 저장되어 있는데, 포인터를 이용하면 해당 데이터에 접근할 수 있다.

보통 컴퓨터의 메모리는 바이트 단위로 구성되어 있고 각 바이트마다 순차적으로 주소가 매겨져 있다.

char ch = 'a'; // 1. 문자형 변수 ch 선언 및 초기화
char* p; // 2. 포인터 변수 p 선언
p = &ch; // 3. 포인터 변수 값 저장
*p = 'b'; // 4. ch = 'b'; 와 동일. p가 가리키는 곳의 내용을 'b'로 교체
char** pp; // 5. 이중 포인터 변수 pp를 선언
pp = &p; // 6. p의 주소를 pp에 복사

Continue reading

C++로 쉽게 풀어쓴 자료구조/ 큐

큐(Queue)의 추상 자료형

큐란?

입출력이 선입선출(First-In First-Out)인 자료구조.

삽입과 삭제가 같은 위치에서 일어나는 스택과 달리 큐는 삽입과 삭제가 다른 위치에서 일어나는데, 삽입이 일어나는 곳을 후단(rear), 삭제가 일어나는 곳을 전단(front)이라고 한다.

Continue reading

C++로 쉽게 풀어쓴 자료구조/ 배열과 클래스

배열(Array)

배열의 개념

배열은 거의 모든 프로그래밍 언어에서 기본적으로 제공되는 자료형으로 많은 고급 자료구조들에서 사용된다. 배열은 주로 여러 개의 동일한 자료형의 데이터를 한꺼번에 만들 때 사용된다.

배열의 가장 기본적인 특징은 ‘인덱스, 요소’ 쌍의 집합이라는 것이다. 즉, 인덱스가 주어지면 해당하는 요소가 대응되는 자료구조이다. 배열에서는 모든 요소가 동일한 자료형이며 인덱스를 사용하여 직접 접근 할 수 있다.

Continue reading

Unity/ 셰이더/ Surface Shader 작성법

Surface Shader

Vertex-Fragment Shader보다 좀 더 높은 수준에서 작성되는 셰이더. Vertex-Fragment 에서 번거롭고 복잡하게 작성해야 하는 것 –라이팅 계산 등– 들을 프로그램 내부에서 자동으로 처리하고, 프로그래머는 직관적인 속성들만 제어하면 되도록 정의되어 있다. –물론 그 자동으로 처리되는 부분을 커스터마이징 하고자 한다면 할 수 있다.

Surface Shader는 유니티에서 주로 사용하는 셰이더이다. 처음 셰이더 파일을 만들면 Default 로 들어가 있는 코드가 서피스 셰이더로 작성되어 있음.

파이프라인


http://www.alanzucconi.com/2015/06/17/surface-shaders-in-unity3d/

Surface Shader에서는 주로 Surface Function을 이용하여 재질을 제어하는 코드를 작성하지만, 필요하다면 Vertex를 제어하거나 Lighting을 제어하는 코드도 만들 수 있다. 위 이미지는 그 3가지 프로세스의 순서를 나타내고 있다.

Continue reading