전체 글 216

[게임 프로그래머 입문 올인원] 비선형 자료구조 3 : 그래프 기초 (57강)

C. 비선형 자료구조 4. 그래프 기초 트리랑 유사하지만 범위가 더 넓다 (트리가 그래프의 일종) a. 그래프의 개념 🌟 현실 세계의 사물이나 추상적인 개념간의 연결관계를 표현 정점(Vertex) : 데이터를 표현 (사물, 개념 등) 간선(Edge) : 정점들을 연결하는데 사용 👉 내용은 어렵지 않지만 내용을 분석하는게 중요함 b.그래프 종류 간선에 추가적인 정보를 넣어서 그래프의 종류를 표현할 수 있음 가중치 그래프 : 지하철 노선도 방향 그래프 : 도로망(일방 통행 포함), 사랑의 짝짓기 💙 게임에서 그래프를 이용해야 하는 상황 * 길찾기 * 서버에서 락을걸어 멀티스레드를 관리할 때 데드락 체크 * 도로망 * 가족관계도 등 👉 즉, 이론을 알면 구현할 수 있는게 너무 많기 때문에 꼭 공부해야 함 c...

[게임 프로그래머 입문 올인원] 비선형 자료구조 2 : 우선순위 큐(56강)

C. 비선형 자료구조 3. 힙 트리 👉 힙 트리를 공부하기 전 미리 이진트리를 공부 [게임 프로그래머 입문 올인원] 이진 트리와 탐색 (70강) 이진 트리(BT) / 이진 탐색 트리(BST) 🌟 이진 트리 : 노드를 최대 2개의 자식으로 가지는 트리 🌟 이진 탐색 트리 : 노드를 최대 2개의 자식으로 가지는 트리 레프트, 라이트 차일드로 만드는게 일 monamu.tistory.com a. 힙 트리 (Heap Tree) 란? 🌟 힙(Heap)이라는 완전 이진트리(Complete Binary Tree)의 형태를 가지며 일정한 조건을 만족하는 자료구조 데이터 구조 중 하나 힙의 특성에 따라 가장 높은(또는 낮은) 우선순위를 가진 노드가 항상 루트 노드에 위치 💥 자료구조에서 힙은 메모리의 힙이 아니고 우선순위..

[게임 프로그래머 입문 올인원] 비선형 자료구조 1 : 재귀함수와 트리 기초(54, 55강)

C. 비선형 자료구조 최종 목표는 A*를 공부하는 것 1. 재귀함수 a. 재귀함수란? 🌟 자기 자신을 호출하는 함수 똑같은 함수를 재사용하면 그 상황을 묘사하는게 쉽기 때문에 사용함 🧡 스택 오버플로우 스택 프레임을 초과해서 사용하기 때문에 나타남 함수가 종료될 때 스택 프레임을 회수해야 하는데 계속 사용하기 때문에 처음에 할당된 스택 메모리가 고갈되어 에러가 생김 b. 재귀함수 예제 1) n! 2) 유클리드 호제법 두 숫자에 대한 최대공약수를 구하는 알고리즘 👉 여기에 잘 설명되어있음 유클리드 호제법 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를..

[게임 프로그래머 입문 올인원] 선형 자료구조 3 : 스택 & 큐 (53강)

B. 선형 자료구조 3. 스택 & 큐 a. 스택 & 큐란? 스택 : 후입선출 (LIFO) 큐 : 선입선출 (FIFO) b. 벡터로 스택 구현하기 후입선출이라 크게 다를게 없음 🧡 pop과 top 함수가 두개로 나뉜 이유 라이브러리에서 꼭 두개의 함수로 나눠서 사용하는 이유는 하는 순간에 에러가 나면 메모리 해제가 안될 수 있는 경우가 있어서 위와 같이 사용 뒤로가기같은걸 해야할 때 좋다 c. 벡터로 큐 구현하기 벡터는 선입선출이 어렵다 front와 back의 개념을 커서처럼 활용해서 구현 (잘 이해못함..) 대기열같은 내용을 만들때 사용한다 출처 : https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98..

[게임 프로그래머 입문 올인원] 템플릿 문법 (52강)

A. 템플릿 문법 1. 템플릿 문법 a. 템플릿이란? 🌟 함수나 클래스를 작성할 때 특정한 데이터 타입에 의존하지 않고 유연하게 작성할 수 있게 하는 것 제네릭 프로그래밍을 지원하기 위한 강력한 언어 특징 코드의 재사용성을 높이고 일반화된 알고리즘을 작성하는데 도움 👉 런타임 X 컴파일할때 모든것이 다 결정되고 사용됨 사용하지 않으면 컴파일시 존재조차 만들어지지 않음 = 오류나지 않음 템플릿은 두 가지 주요 형태로 사용 함수 템플릿 클래스 템플릿 C#의 제네릭이랑 비슷하지만 기능이 더 많고 어렵다 (거의 흑마법) b. 함수 템플릿 1) 정의 🌟 함수의 데이터 타입을 일반화하여 함수를 선언하고 정의 다양한 데이터 타입에 대해 동일한 코드를 재사용할 수 있게 함 HTML 삽입 미리보기할 수 없는 소스 tem..

[게임 프로그래머 입문 올인원] 선형 자료구조 실습 2 : 플레이어 이동하기(51강)

B. 플레이어 이동하기 1. 플레이어 나타내기 a. 맵에 플레이어 인식시키기 📁 Board > 📄 Board.h 맵을 만들어줄 때 플레이어를 동시에 초기화 📁 Board > 📄 Board.cpp 📁 Main > 📄 Maze.cpp b. 플레이어 생성 및 표시하기 위에서 생성한 GetPos() 구현하기 위해 Player 파일로 가기 📁 Board > 📄 Player.h Player의 위치, 방향, 가야할 길, 벽 감지 등 구현해줌 📁 Board > 📄 Player.cpp 여기까지 하고 Maze.cpp 실행하면 2. 플레이어 이동하기 a. 프레임 관리하기 위한 코드 생성 📁 Main > 📄 maze.cpp 경과시간을 같이 업데이트해주는게 일반적 위 코드처럼 아래 문법을 사용하면 문법을 문서화 할 수 있음 #..

[게임 프로그래머 입문 올인원] 선형 자료구조 실습 1 : 미로 맵 만들기(50강)

A. 미로 맵 만들기 1. 기본 틀 생성하기 플레이어가 길찾기 하는 맵을 실습 (자료구조 알고리즘에 대한 기초 쌓기) a. types.h 생성 📁 Main > 📄 types.h 변수 사용하기 편리하려고 작성하는 것 b. pch class 구현 1) 생성 📁 Main > 📄 pch.h 🌟 "프리 컴파일 헤더" 라는 뜻 자주 사용하는 헤더 파일을 모아두는 곳 모두 작성했다면 설정해주기 2) 설정 먼저 Maze 프로젝트 속성 변경 다음으로 pch.cpp 파일 속성 변경 💥 pch.h 파일 만들기 전에 생성한 파일들은 따로 #include "pch.h" 추가해줘야 함 (이후에 만든 파일들은 없어도 되지만 가끔 오류가 나는 경우가 있음) 🧡 소스 코드를 미리 컴파일 해야 하는 경우 3) 구현 좌표 pos 구조체 ..

[게임 프로그래머 입문 올인원] 선형 자료구조 : 시간복잡도 (49강)

A. 시간복잡도 1. BIG-O 표기법 알고리즘의 효율을 객관적으로 측정하기 위해 사용 a. 대략적인 계산 b. BIG-O 표기법의 규칙 c. BIG-O 표기법의 의의 d. Log 함수 ➡ 선형과 비선형 자료구조 공부하면서 나오는 내용! [게임 프로그래머 입문 올인원] 자료구조 : 선형과 비선형 기초내용 (46강) A. 자료구조 1. 선형과 비선형 a. 선형구조 🌟 자료를 순차적으로 나열한 형태 배열 연결리스트 스택 / 큐 👉 대부분의 경우 이 선형구조를 사용함 b. 비선형 구조 🌟 하나의 자료 뒤에 다수의 자 monamu.tistory.com 출처 : https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%..

[게임 프로그래머 입문 올인원] 선형 자료구조 2 : 동적배열 (48강)

B. 선형 자료구조 2. 배열 a. Array 생성하기 STL에서 array라는 클래스를 만들어 사용하길 권장 기본적인 틀인 버퍼, 사이즈, 용량을 작성해줌 b. 생성/소멸자 만들기 버퍼는 용량에 따라 생성 explicit은 꼭 사용하기 c. 함수 생성하기 1) 데이터 저장 : push_back 함수 생성 용량 체크하는 예외처리도 필수 2) 인덱스 값 가져오기 : operator[] 함수 생성 예외체크 assert 문법 ( #include 추가해야 함) 사용 d. 배열 사용하기 26번째 코드에서 에러가 나는 것 처럼, 일반 배열은 더 큰 배열로 수정할 수 없음 따라서 위와 유사하지만 다른 Vector을 사용함 e. 배열 총 코드 HTML 삽입 미리보기할 수 없는 소스 #pragma once #includ..

[게임 프로그래머 입문 올인원] 선형 자료구조 1 : 연결 리스트 (47강)

B. 선형 자료구조 1. 연결 리스트 a. 노드 🌟 리스트를 구현할 때 가장 핵심 46강에서 설명한 것 처럼, 101호 방 자체(데이터 공간)를 노드로 표현한다 b. 노드로 연결리스트 생성 (단방향) c. 단방향 리스트의 문제점 첫 번째 노드를 '헤드'라고 부르는데 (마지막 노드는 '테일') 마지막 값을 얻고 싶다면, 첫번째 부터 다 거쳐야 하고 중간에 값을 삽입하고 싶다면 그 전 후 값을 다 알아서 낑겨넣어줘야 함 👉 따라서 양방향으로 생성하는게 일반적임 d. 양방향 리스트 생성 헤드와 테일을 아래와 같이 따로 지정해줘야함 2. 실습 : 미로 맵 만들어보기 a. Maze 프로젝트 생성 b. 기본적인 틀 생성하기 c. 노드 생성하기 1) 첫 노드 추가 2) 첫 노드가 아닌 노드 추가 d. dummy no..