본문 바로가기

[C++] Data Structure & Algorithm44

[Linear Data] Chapter 01. 동적 배열 구현 GitHub : https://github.com/developeSHG/Data_Structure-Algorithm/commit/2e1fffb765ff77ea1e260e027e2d0a23d81f7f73 동적배열(Vector) 구현 · developeSHG/Data_Structure-Algorithm@2e1fffb developeSHG committed Aug 7, 2023 github.com 선형 구조는 자료를 순차적으로 나열한 형태 - 배열 - 연결 리스트 - 스택 / 큐 비선형 구조는 하나의 자료 뒤에 다수의 자료가 올 수 있는 형태 - 트리 - 그래프 배열 VS 동적 배열 VS 연결 리스트 { 배열 : - 사용할 데이터를 고정해서 할당하고 (절대 변경 불가) - 연속된 메모리를 배정받아 사용 장점 .. 2023. 8. 7.
[Maze] Chapter 02. 오른손 법칙 (우수법) GitHub : https://github.com/developeSHG/Data_Structure-Algorithm/commits/01.Maze GitHub - developeSHG/Data_Structure-Algorithm: Data Structure & Algorithm Data Structure & Algorithm. Contribute to developeSHG/Data_Structure-Algorithm development by creating an account on GitHub. github.com 만약 미로에 갇혔을 때, 탈출하려면 무식하면서도 직관적인 방법이 하나 있다. 바로 오른손 법칙. 오른손으로 벽을 만지면서 가는 것을 얘기한다. 우수법이라고도 한다. 하지만 100% 확률로 모든.. 2023. 8. 6.
[Maze] Chapter 01. 맵 만들기 GitHub : https://github.com/developeSHG/Data_Structure-Algorithm/commits/01.Maze GitHub - developeSHG/Data_Structure-Algorithm: Data Structure & Algorithm Data Structure & Algorithm. Contribute to developeSHG/Data_Structure-Algorithm development by creating an account on GitHub. github.com Board.cpp - Render : 좌표 0으로 매번 초기화하고, 각 좌표에 해당하는 타일을 갖고와 타입에 맞는 컬러로 렌더 - GenerateMap : 맵을 만들어주는 곳. (테두리와 랜덤.. 2023. 8. 6.
[STL] algorithm 기존 문제점 예제를 하나씩 풀어봤는데, 가독성이 좋지 않다는 걸 알 수 있다. 코드는 굉장히 단순하지만, 그래도 분석하는데 최소 10초는 걸릴 수 있다고 생각할 수 있다. 또한 정형화된 패턴이 아니다보니 프로그래머 마다 스타일이 다를 수도 있다. 그래서 바로 보자마자 이해하기 어렵다. 더욱 큰 단점은 코드는 vector를 사용했기 때문에, 코드 내에선 특정 인덱스에 접근(v[i])하는 임의 접근 코드가 들어가있지만, 만약 삽입/삭제의 효율 때문에 list로 바꿔야 한다면 문법의 문제가 생길것이다. #include #include #include using namespace std; int main() { srand(static_cast(time(nullptr))); vector v; for (int i .. 2023. 5. 22.
[STL] set, multimap, multiset set #include #include #include #include using namespace std; 주제 : set, multimap, multiset int main() { // (key = value) set s; // 넣고 s.insert(10); s.insert(20); s.insert(30); s.insert(40); // 뺴고 s.erase(40); // 찾고 set::iterator findit = s.find(50); if (findit == s.end()) cout 2023. 5. 20.
[STL] map vector, list 문제점 #include using namespace std; class Player { public: Player() : _playerId(0) { } Player(int playerId) : _playerId(playerId) { } public: int _playerId; } int main() { vector v; // 10만명 입장 for (int i = 0; i < 100000; ++i) { Player* p = new Player(i); v.push_back(p); } // 5만명이 퇴장 for (int i = 0; i < 50000; ++i) { int randIndex = rand() % v.size(); Player* p = v[randIndex]; delete p.. 2023. 5. 19.
[STL] deque #include #include // 주제 : deque // vector : 동적 배열 [ ] // list : 이중 연결 리스트 // [ ] [ ] [ ] [ ] // deque : doble-ended queue 데크 // [ ] // [ ] // [ ] int main() { // 시퀀스 컨테이너 (Sequence Container) // 데이터가 삽입 순서대로 나열되는 형태 deque dq; // vector와 사용형태가 굉장히 비슷하다. // capacity가 없다. dq.push_back(1); dq.push_front(2); dq[0]; // 임의접근도 가능. // vector와 마찬가지로 배열 기반으로 동작. // 다만 메모리 할당 정책이 다르다. // vector는 뒤로만. deque는.. 2023. 5. 19.
[STL] list #2 list 직접 만들어보기. #include using namespace std; #include #include // 오늘의 주제 : list template class Node { public: Node() : _next(nullptr), _prev(nullptr), _data(T()) { } Node(const T& value) : _next(nullptr), _prev(nullptr), _data(value) { } public: Node*_next; Node*_prev; T_data; }; template class Iterator { public: Iterator() : _node(nullptr) { } Iterator(Node* node) : _node(node) { } // ++it Iter.. 2023. 5. 19.
[STL] list #1 list (연결 리스트) list의 동작 원리 중간 삽입/삭제 처음/끝, 삽입/삭제 임의 접근 (Random Access) list li; for (int i = 0; i < 100; ++i) li.push_back(i); li.push_front(0); // vector는 처음 삽입이 비효율적이라 없음 int size = li.size(); //li.capacity(); // 없음 int first = li.front(); int last = li.back(); // li[3] = 10 // 임의접근 허용안됨 list::iterator itBegin = li.begin(); list::iterator itEnd = li.end(); li.insert(itBegin, 100); li.erase(li.be.. 2023. 5. 15.
[STL] vector #4 vector 직접 만들기 template class Vector { public: Vector() : _cata(nullptr), _size(0), _capacity(0) { } ~Vector() { if (_data) delete[] _data; } T& operator[](const int pos) { return _data[pos]; } public: void push_back(const T& val) { if (_size == _capacity) { // 증설 작업 int newCapacity = static_cast(_capacity * 1.5); // capacity가 0 or 1 이면 0과 1.5 짤려서 1을 반환하기 때문에 체크 if (newCapacity == _capacity) newC.. 2023. 5. 15.