컴퓨터가 이해하는 정보컴퓨터는 작성한 소스코드를 데이터와 명령어 형태로 변환 뒤 실행명령어: 컴퓨터에게 행동 지시를 내리는 말데이터: 명령의 대상, 명령어의 재료 ※ CPU의 종류에 따라 실행가능한 명령어의 종류나 처리방식이 달라진다. 컴퓨터의 핵심부품- CPU- 메모리- 캐시 메모리- 보조기억장치- 입출력 장치 CPUCPU명령어를 읽고 해석하고 실행하는 부품 구성요소1. ALU(산술연산장치): 연산을 수행하는 회로로 구성된 계산기2. CU(제어장치): 명령어를 해석해 전기신호로 내보내는 장치 - 전기신호: 부품을 작동시키기 위한 신호3. 레지스터: 명령어를 처리하며 중간값을 저장 주기억 장치주기억장치"실행중"인 프로그램의 데이터와 명령어를 저장하는 부품으로 휘발성이다.RAM과 ROM이 주기억..
이분 탐색데이터들이 "정렬되있는 상태"에서 시작점과 끝점을 반씩 줄여나가며 원하는 데이터를 찾는 탐색 알고리즘이다.시간복잡도는 O(logN)을 갖는다why? 반씩 덜어내며 탐색하기 때문이다.공간 복잡도는 O(N)why? 별도의 메모리 공간을 더 확보하지 않기 때문이다. 코드#include using namespace std;//비교 횟수 기록용int gCount = 0;//이분 탐색 검색void BinarySearch(int tArray[], int Begin, int End, int data) { if (Begin > End) { cout 결과
스택FILO 형태로 동작하며 가변형태를 가지는 자료구조이다.원시배열은 크기가 고정되어 있기 때문에, 가변배열이며 스택의 출입구는 한 곳이므로 단방향 연결리스트로 구현하는 것이 좋다.스택은 메모리 저장에서 활용된다. 이런 형태를 구현하기 위해선 포인터의 이해가 필수이다.(나도 가끔 헷갈린다) 코드/*스택StackFILO Frist In Last Out 형태로 동작하며, 가변형태를 가지는 자료구조이다.원시배열은 크기가 고정되어 있기때문에,가변 배열인 Single Linked List로 구현하는것이 적합하다.Why?스택은 출입구가 하나이므로 Single연결리스트로 push, pop시에 O(1)로 가능하기 때문이다.*/#include using namespace std;struct SNode { //데이터..
이진 탐색 트리탐색을 위한 트리형태의 구조를 가진 자료구조로 다음과 같은 조건을 만족해야 한다.1. 같은 값을 갖는 노드가 없어야한다.2. 왼쪽 서브트리에 있는 값은 현재 노드의 값보다 작고, 오른쪽 서브트리에 있는 값은 현재 노드보다 커야한다.3. 서브트리도 이진트리여야 한다.탐색과 추가는 쉽게 구현할 수 있지만 삭제의 경우 좀 번거로움이 있다.탐색탐색하려는 키 값이 루트 노드의 키 값과 같은지 비교한다.탐색하려는 키 값이 루트노드의 키 값 보다 작으면 왼쪽 서브트리로 이동한다. 반대로 키 값이 크면 오른쪽 서브트리로 이동한다.이동한 서브트리에서 1을 재수행한다.추가탐색하려는 키 값이 트리내에 존재하는지 탐색한다.존재한다면 추가작업을 그만한다.존재하지 않는다면 탐색 실패가 발생한 위치에 노드를 생성하여..
C++로 양방향 연결리스트(Linked List) 구현/*양방향 연결리스트 구현(Linked List)연결리스트는 (헤드포인터 , 값, 꼬리포인터)로 구성되어 있다.*/#include using namespace std;//리스트의 노드struct LinkedNode { int Data=0; //항상 nullptr로 초기화 LinkedNode* prev = nullptr; //헤드 노드 LinkedNode* next = nullptr; //꼬리 노드};// 리스트 전체 구조struct LinkedList { LinkedNode* head = nullptr; LinkedNode* tail = nullptr;};//삽입void InsertNode(LinkedList* list..
행동 트리란?게임 AI에서 널리 사용되는 트리기반의 의사결정 구조, AI캐릭터가 순서,조건에 따라 어떤 행동을 할지 처리합니다. 기본 구조루트(root): 트리의 시작점컴포지트 노드(Composite): 자식 노드를 여러개 가짐Selector: 자식이 하나라도 성공하면 성공 (OR)Sequence: 자식이 모두 성공해야 성공(AND)데코레이터 노드(Decorator): 한 개의 자식을 감싸 조건을 붙임repeat, Inverter, UntilFail리프 노드(Leaf)Action: 실제 행동 수행(공격, 이동 등)condition: 조건 평가노드의 반환에는 Success, Run, Fail로Success: 조건에 해당하여 해당 노드의 코드 실행Run: 노드 실행중Fail: 조건에 실패하여 실패 반환 예시..
map 컨테이너연관 컨테이너로 원소를 key와 value의 쌍으로 저장한다.set은 원소를 key하나로 저장하지만 map은 원소를 key와 value 쌍으로 저장하며, map도 key의 중복 저장을 하지 못하지만 중복저장을 원한다면 multiset을 사용해야한다.map은 [ ] 연산자를 제공하여 key에 해당하는 원소의 value에 쉽게 접근하거나 변경할 수 있다. 균형 이진 트리: 모든 노드가 부모보다 왼쪽이 작고 오른쪽이 큰 형태. (반대라면 반대로) 연관 컨테이너는 균형 이진 트리를 사용하므로 찾기연산( find(), lower_bound(), upper_bound(), equal_range(), count())에 뛰어난 성능(로그 시간)을 보이며 insert 또한 로그 시간 복잡도를 보인다. 중복..
set 컨테이너연관 컨테이너 중 단순한 컨테이너로 Key라 불리는 원소(value)의 집합으로 이뤄진 컨테이너. 중복 혀용X노드 기반의 컨테이너로 균형 이진 트리로 구현되어 있다.set은 원소를 삽입할때 유일한 멤버 함수 insert( )를 제공한다. 균형 이진 트리: 모든 노드가 부모보다 왼쪽이 작고 오른쪽이 큰 형태. (반대라면 반대로) 연관 컨테이너는 균형 이진 트리를 사용하므로 찾기연산( find(), lower_bound(), upper_bound(), equal_range(), count())에 뛰어난 성능(로그 시간)을 보이며 insert 또한 로그 시간 복잡도를 보인다. 중복을 허용하는 multiset 컨테이너템플릿 형식, 인터페이스, 멤버의 형식 모두 set과 같고, key가 중복으로 저..
1. 다음 중 vector 컨테이너의 특징을 고르세요.1. 시퀀스 컨테이너입니다.2. sort( ), splice( ) 멤버함수를 제공합니다. (vector 자체에서 sort splice는 제공하지 않음)3. 배열 기반 컨테이너 입니다.4. 컨테이너 앞, 뒤로 추가/제거가 가능합니다. (vector는 뒤로 추가 제거만 가능)5. 임의 접근 반복자를 제공합니다.6. reserve( ) 멤버 함수를 제공합니다.7. 빠른 시간(상수 시간)에 원소를 삽입, 삭제 할 수 있습니다. (삽입 삭제 시 필요한 만큼의 메모리 공간을 위해 빠른 시간 내에 할 수는 없음) 답: 1, 3, 5, 6 2. 다음 중 deque 컨테이너의 특징을 고르세요.1. 시퀀스 컨테이너 입니다.2. sort( ), splice( ) 멤버 함..