자료구조와 알고리즘/Data Structure 21

[게임 프로그래머 입문 올인원] STL Container : map, hash_map 실습 (75강)

A. 실습 먼저 무슨 게임을 만들건지 먼저 정하기 1. 기본적인 게임 생성해보기 a. 플레이어 생성 b. 몬스터 생성 c. 오브젝트 생성 d. 플레이어 찾기 1) dynamic_cast 1번 플레이어를 찾아주고 플레이어가 없으면 널포인터를 뱉어주는 코드 ➡ 포인터를 어떻게 들고있는지는 딱히 상관이 없고 들고있는 바이트만큼 해제를 함 2) enum 만약 dynamic_cast 사용하기 싫다면 enum을 사용해서 관리 🧡 포인터 문제 ptr의 heap 메모리에 저장되어있는 정보를 가지고 메모리를 해제하게 됨 e. 업데이트 하기 필드에서 업데이트 함수를 생성해서 모든 오브젝트 갱신하기 다음으로 인벤토리 등등을 추가해주면 됨 출처 : https://www.inflearn.com/course/%EA%B2%8C%E..

[게임 프로그래머 입문 올인원] STL Container : hash_map (74강)

B. STL Container : hash_map 1. hash_map a. hast_map이란? 🌟 해시 함수를 사용하여 데이터를 저장하는 자료구조 std::unordered_map이라는 클래스 템플릿으로 제공 (hash_map은 옛날 이름) ex) std::unordered_map은 정수형 키와 문자열 값으로 이루어진 해시 맵 map이랑 기능적인 측면에서 다르지 않음 공간을 다 확보해 놓고 맞는 데이터를 꺼내 쓰는 방법 👉 즉, 201, 202호처럼 통을 먼저 구현해놓고 그 통에 값을 쏙쏙 넣어주는 개념! b. hash_map의 특징 키와 값의 쌍으로 데이터를 관리 해시 맵은 키의 순서를 유지하지 않으며, 각각의 키는 유일 해시 테이블을 기반으로 구현 일반적으로 빠른 검색 속도를 제공(시간복잡도 0(..

[게임 프로그래머 입문 올인원] STL Container : map (73강)

A. STL Container : map 1. map a. map이란? 🌟 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 자료구조 표준 헤더 파일 을 포함하여 사용 ex) std::map은 정수형 키와 문자열 값으로 이루어진 map set이랑 거의 동시에 감 개발 초반이나 매니저를 구현할때 사용 b. map의 특징 키와 값의 쌍으로 데이터를 저장 (키는 유일) 일반적으로 빠른 검색 속도를 제공하는 자료구조 내부적으로 레드-블랙 트리(Red-Black Tree)와 같은 균형 이진 탐색 트리가 사용되어 키의 정렬된 상태를 유지 따라서 시간복잡도는 O(log n) c. map의 기능 키를 기반으로 한 검색, 추가, 삭제, 수정 등의 연산을 제공 데이터의 삽입 시 자동으로 정렬되어 저장 d. map이..

자료구조 개요

A. 자료구조 개요 1. 자료구조의 기초 a. 자료구조란? 🌟 데이터를 조직화하고 저장하는 방법을 다루는 컴퓨터 과학의 분야 컴퓨터에서 효율적인 데이터 처리와 관련된 연산을 수행하기 위해 사용 💙 데이터? 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하는 모든 값 b. 자료구조의 선택 기준 자료의 처리 시간 자료의 크기 자료의 활용 빈도 자료의 갱신 정도 프로그램의 용이성 c. 자료구조의 특징 1) 조직화(Organization) 자료구조는 데이터를 구조화하여 저장하는 방법을 제공 데이터를 쉽게 관리하고 검색할 수 있도록 함 2) 효율성(Efficiency) 자료구조는 데이터에 대한 효율적인 접근 및 조작을 가능하게 함 적절한 자료구조를 선택함으로써 데이터 처리 작업의 성능을 향상 3) 추상화(Ab..

[게임 프로그래머 입문 올인원] 트리 자료구조 : 레드 블랙 트리 (72강)

A. 트리 자료구조 3. 레드 블랙 트리 a. 레드 블랙 트리란? 🌟 각 노드가 레드 또는 블랙의 색상을 가지며 특정한 규칙을 따르는 트리 구조 균형 이진 탐색 트리의 일종 b. 레드 블랙 트리의 규칙 각 노드는 레드 또는 블랙 루트 노드, 모든 리프 노드(NIL)는 블랙 레드 노드의 자식 노드는 모두 블랙 어떤 노드로부터 리프 노드까지의 모든 경로에는 리프 노드를 제외하고 같은 개수의 블랙 노드가 있어야 함 = 블랙 높이 👉 위 내용만 잘 알고있으면 됨 c. 레드 블랙 트리의 특징 위 규칙을 통해 트리가 균형을 유지해 연산의 효율이 높아져 ➡ 탐색, 삽입, 삭제 연산을 O(log n)의 시간복잡도로 보장 레드-블랙 트리는 데이터베이스, 맵 등의 자료구조로 널리 사용 d. 레드 블랙 트리 추가 1) 이상..

[게임 프로그래머 입문 올인원] 트리 자료구조 : 이진 탐색 트리 (70, 71강)

A. 트리 자료구조 1. 이진 트리(BT) a. 이진 트리란? 🌟 각 노드가 최대 두 개의 자식 노드를 가지는 트리 구조 계층적으로 데이터를 구성하는데 사용 이진 탐색 트리, 힙, AVL트리, 레드블랙 트리 등 다양한 종류의 자료구조 와 알고리즘에서 기본적인 구성 요소 레프트, 라이트 차일드로 만드는게 일반적 (2개뿐이니) b. 이진트리의 규칙 각 노드는 최대 두 개의 자식 노드를 가짐 각 노드는 하나의 부모 노드를 가질 수 있음 각 노드는 데이터를 저장하기 위한 값을 가질 수 있음 이진 트리는 재귀적으로 정의되며, 각 노드의 왼쪽과 오른쪽 서브트리 또한 이진 트리 👉 이진 탐색 알고리즘 선행공부 분할 정복(Divide and Conquer) 알고리즘 1 : 이진 탐색 (Binary Search) A. ..

[게임 프로그래머 입문 올인원] STL Container : list와 iterator(67강)

A. list 1. list의 기본기 (복습) a. size와 capacity size : 리스트의 노드 개수 capacity : 존재하지 않음 b. 데이터 삽입 / 추출의 시간복잡도 🧡 시간복잡도 - 시작 O(1) - 중간 O(1) HTML 삽입 미리보기할 수 없는 소스 list.insert(); ex) li.insert(li.end(), 1); li.insert(li.end(), 2); //insert함수는 iterator를 반환 li::iterator it = li.insert(li.end(), 3); li.insert(li.end(), 3); li.insert(li.end(), 4); //그걸 저장해 지우거나 삽입할 때 사용가능 li.insert(it,100); li.erase(it); d. 임의..

[게임 프로그래머 입문 올인원] STL Container : vector와 iterator (65, 66강)

A. vector 강의 내용이 너무 뒤죽박죽이여서 목차를 잡을 수 없음 강사님의 질문과 대답이 다른 경우가 많아;; 강의 흐름대로 목차를 잡음 1. vector의 기본기 (복습) a. size와 capacity의 차이점 🌟 실제 사용하는 공간 / 할당된 공간 reserve를 먼저 사용하는 이유? ➡ 이사비용, 메모리 파편을 아낌 capacity까지 줄이고 싶다면 빈 벡터로 스왑 : 사용 안함(이론적인 것) b. 데이터 삽입, 추출, 임의 접근의 시간복잡도 push_back() : 가장 고전적으로 데이터를 삽입하는 방법 🧡 시간복잡도 - 시작 : O(n) - 중간 : O(n) - 끝 : O(1) - 첫 데이터 가져오기 front() : O(1) - 마지막 데이터 가져오기 back() : O(1) - 임의 ..

[게임 프로그래머 입문 올인원] 함수 객체 (64강)

B. 함수 객체 1. 함수 객체의 기본 a. 함수 객체란? 🌟 함수처럼 작동하는 객체 함수처럼 호출될 수 있고, 상태를 유지할 수 있음 주로 함수 포인터의 한계를 극복하거나 유연한 동작을 제공하기 위해 사용 c++에서 자주 사용 b. 함수 객체의 구조 구조는 일반 클래스나 스트럭트의 구조와 다를게 없음 HTML 삽입 미리보기할 수 없는 소스 #include // 함수 객체 클래스 정의 class MyFunctionObject { public: // 호출 연산자 정의 void operator()(int x) const { std::cout

[게임 프로그래머 입문 올인원] 함수 포인터 (63강)

A. 함수 포인터 1. 함수 포인터 기초 먼저 함수 객체를 이해하려면 함수 포인터에 대한 내용을 알아야 함 더보기 저번에 우선순위 q를 사용해 데이터를 꺼낼 때 정렬시 사용한 대소비교 객체가 무엇인지 (less, greater) 공부를 했었음 이 less, greater에 대한 공부임!! a. 함수 포인터란? 🌟 함수를 가리키는 포인터 int, double과 같은 자료구조들 뿐만 아니라 함수 자체도 포인터로 들고 있을 수 있음 다른 데이터 유형과 마찬가지로 메모리에 위치, 함수의 메모리 구조를 저장 👍 함수를 실행하는 시점을 뒤로 미룰 수 있다는게 장점 실행하는 시점을 뒤로 미룰 수 있다 ➡ 다양한 요청을 순서대로 처리한다 b. 함수 포인터 사용 1) 어떤 함수 작성 2) 함수 타입(FuncType) 생..