게임 프로그래밍에서 자료 구조는 매우 중요하며 다양한 방식으로 활용된다.게임의 성능, 메모리 사용, 기능 구현 등에 직접적인 영향을 미치기 때문에 효율적인 자료 구조 선택과 구현이 필요하다. 아래는 게임 프로그래밍에서 자주 사용하는 주요 자료 구조와 그 응용에 대한 설명이다. I. 배열(Array)정의 : 동일한 타입의 요소를 연속적으로 저장하는 자료 구조응용 : 게임 내 객체들의 위치, 상태, 속성 등을 저장, 예를 들어, 게임 맵의 타일 정보, 캐릭터의 애니메이션 프레임 등을 배열에 저장한다. II. 연결 리스트(Linked List)정의 : 각 요소가 다음 요소에 대한 포인터를 가지고 있어 동적으로 요소를 추가하거나 제거할 수 있는 자료 구조응용 : 동적 데이터 목록을 다루는 데 유용. 예를 들어 ..
Etc.
기초 학습 자료 구조알고리즘 문제 해결 전략게임 기초 수학 TCP/IP, UDP시스코 네트워킹컴퓨터 시스템(CSAPP)컴퓨터 프로그램의 구조와 해석(SICP)원도우 API 게임 기술BOX2DSTL 프로그래밍GoF 디자인 패턴 게임 프로그래밍 패턴그래픽스 API3D공간에 대한 이해 / 선형대수학렌더링 파이프라인 / 셰이더 프로그래밍물리 라이브러리 (PhysX)게임 시스템(게임 루프, 입력 처리, 충돌 처리, AI, 렌더링)
포인터포인터는 다른 변수나 메모리의 주소를 저장하는 변수이다.코드를 작성하면서 포인터의 개념이 부족하다고 느껴 포인터에 대해 공부하고 기록하려고 한다. I. 포인터 선언 및 초기화포인터는 특정 데이터 형식의 변수를 가리키는 변수이다. 포인터를 선언할 때는 데이터 형식 뒤에 '*' 를 붙인다.int* ptr; // int 형 변수를 가리키는 포인터char* cptr; // char 형 변수를 가리키는 포인터 또한 포인터는 다른 변수의 주소를 저장한다.주소를 할당하려면 주소 연산자 '&' 를 사용한다.int a = 10;int* ptr = &a; // 'a' 변수의 주소를 ptr에 저장 II. 포인터의 역참조포인터를 통해 실제 변수에 접근할 수 있다.이를 역참조라고 하며 '*' 연산자를 사용한다.in..
댕글링 포인터프로그램이 더 이상 유효하지 않은 메모리 주소를 참조하는 포인터를 의미한다. 이는 메모리 안전성과 프로그램의 안전성을 저하시킬 수 있는 중요한 문제이다. 댕글링 포인터가 발생하는 주요 원인과 그 결과, 그리고 이를 방지하는 방법에 대해 알아보자 댕글링 포인터가 발생하는 주요 원인I. 객체 해제 후 포인터 사용:메모리 해제(삭제) 후에도 여전히 포인터가 해당 메모리를 가리키고 있는 경우, 해당 포인터는 더 이상 유효한 메모리를 참조하지 않게 된다. 이때 그 포인터를 댕글링 포인터라고 한다.int* ptr = new int(10);delete ptr; // 메모리 해제*ptr = 20; // 댕글링 포인터 사용, 정의되지 않은 동작(UB) II. 스택 메모리 참조:함수가 반환된 후 스택에..
Aura 프로젝트를 진행하면서 C++에 대한 지식을 생각보다 얕게 가지고 있었다. 특히 Class가 자주 사용되는데 어떻게 사용되는건지 이해를 확실히 하고 넘어가야겠다고 프로젝트 하면서 자주 느끼게 되어 클래스에 대해 알아보았다. 클래스(Class)란?C++에서 클래스는 데이터와 해당 데이터를 조작하는 함수를 하나의 단위로 묶어주는 기능을 제공한다. 클래스는 객체지향 프로그래밍의 핵심 개념 중 하나이며, 코드의 구조화, 재사용성 및 유지보수성을 향상시키는 데 사용된다. 간단한 C++ 클래스 예시를 확인해보자.#include // 클래스 정의class Rectangle {private: int width; int height;public: // 생성자 Rectangle(int w,..
BaekJoon 1931 회의실 배정 문제 https://alsrudwls.tistory.com/18 #include #include #include using namespace std; int main() { int n; cin >> n; vector list; for (int i = 0; i > start >> end; list.push_back(make_pair(end, start)); } sort(list.begin(), list.end()); int time = list[0].first; int count = 1; for (int i = 1; i = time) { count++; ..
Vector란? 자동으로 메모리가 할당되는 배열이라고 생각하면 된다. 사진과 같이 맨 뒤쪽에서 삽입과 삭제가 가능하며 중간에 값을 삽입하거나 삭제할 수도 있다. 하지만 이는 배열기반이기에 삽입 삭제가 빈번하게 일어나면 비효율적이다. Vector의 사용법 vector의 선언은 vector [변수이름] ex) vector arr Vector의 생성자와 연산자 vector arr; - 비어있는 vector arr를 생성함 vector arr(5); - 기본값 0으로 초기화 된 5개의 원소를 가지는 vector v를 생성함 vector arr(5, 2); - 2로 초기화된 5개의 원소를 가지는 vector arr를 생성함 vector arr1(5, 2); vector arr2(arr1); - arr2는 arr1..
문제를 자주 풀다보면 시간이 초과되어 오답으로 처리되는 경우가 있었다. 다른 언어는 잘 모르지만 C++언어에서 입출력을 향상시키는 방법을 몇가지 적어보려고 한다. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); 의미와 장단점 ios_base::sync_with_stdio 구문은 c의 stdio와 c++의 iostream을 동기화시켜주는 역할을 하는데 이 때 iostream과 stdio의 버퍼를 모두 사용하기에 딜레이가 발생한다. 따라서 ios_base::sync_with_stdio(0)를 작성해 동기화를 비활성화 시켜줄 수 있다. 이로 인해 c++만의 독립적인 버퍼 생성, c의 버퍼와 병행할 수는 없지..