c++ 30

[C++] 람다 식

[C++] 람다(lamda) 식 람다(lamda)식 C++ 11에서 부터 추가된 식이며, 람다 식은 함수에 인수로 호출되거나 전달되는 위치에서 익명 함수 개체(클로저)를 정의하는 편리한 방법이다. 일반적으로 알고리즘 또는 비동기 함수에 전달되는 몇 줄의 코드를 캡슐화하는 데 사용된다. 1. []는 capture절로 변수 또는 함수를 가져올 수 있다. 람다 소개자 2. ()는 매개 변수를 넣는 부분. 선택적이다. 3. mutable는 변경이 가능한 사양을 넣는 부분. 선택적 4. throw()는 예외처리. 선택적 5. ->type 리턴 타입 설정. 선택적 6. {}는 람다의 본문이다. #include #include using namespace std; //일반 함수 void Sum(int a, int b..

[UE4] Log

[UE4] Log 개발을 하는 과정에서 Log를 남겨 확인해야하는 일이 굉장이 많은데 이것을 블루프린트와 C++ 두가지 방법으로 출력하는 방법을 알아보자! Blueprint 좌측 상단에서 실행이 된다. C++ 화면 출력 #include "Engine.h" //... GEngine->AddOnScreenDebugMessage(int32 Key, float TimeToDisplay, FColor DisplayColor, const FString& DebugMessage, bool bNewerOnTop, const FVector2D& TextScale); GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Yellow, TEXT("Hello World!")); 로그 출..

[알고리즘] 이진 탐색 트리 (Binary Search Tree)

[알고리즘] 이진 탐색 트리 (Binary Search Tree) https://doanhan.tistory.com/49?category=583264 [알고리즘] 이진 트리 (Binary Tree) [알고리즘] 이진 트리 (Binary Tree) 이진트리는 기본적으로 많이 사용되는 비선형 자료구조이다. 기존에 힙에서도 이진트리를 사용했는데 그것은 완전 이진 트리로 배열로 표현이 가능하지만 doanhan.tistory.com 이진 탐색 트리는 특정한 특징을 가지고 있는 이진 트리를 의미한다. - 각 노드에는 중복되지 않는 키가 있다. - 루트 노드의 왼쪽은 루트보다 작은 값이, 오른쪽은 루트보다 큰 값으로 구성되어야 한다. - 서브 트리들도 전부 위와 같은 구성으로 이루어져야 한다. 이진 트리는 전위, 중..

[알고리즘] 에라토스테네스의 체(Sieve of Eratosthenes)

[알고리즘] 에라토스테네스의 체(Sieve of Eratosthenes) 에라토스테네스의 체는 체라는 말처럼 무엇인가를 걸러내는 거나 판별하는 것을 의미하는데, 이것은 소수(PrimeNumber)이다. 소수는 2개의 약수(1과 자기 자신)만을 가지고 있는 수이다. 즉, 에라토스테네스의 체는 소수를 대량으로 빠르게 판별할 수 있는 알고리즘입니다. 먼저 일단 소수를 판별하는 방법을 구현해보겠습니다. #include using namespace std; //소수 판별 bool IsPrimeNumber(int x) { for(int i = 2; i < x; i++) { if(x%i ==0) retur false; } return true; } 위는 간단하게 소수를 구하는 방법이다. 하지만 시간복잡도가 O(N)로..

[자료구조] 원형 연결 리스트 (Circular Linked List)

[자료구조] 원형 연결 리스트 (Circular Linked List) 원형 연결 리스트는 마지막 꼬리(Tail)가 NULL을 가리키지 않고 처음 머리(Head)를 가리키는 구조이다. 단일 연결 리스트와 이중 연결 리스트 둘 다 구현이 가능하다. 원형 연결 리스트는 한 노드에서 모든 노드로 접근이 가능할 수 있다는 장점을 가지고 있다. 하지만 잘못 사용 시 무한 순환이 되는 상황이 발생할 수 있습니다. 소스코드 구현 (C++) #include using namespace std; struct Node { Node(int data) { Data = data; Prev = Next = NULL; } void Destroy() { delete this; } Node* Prev; int Data; Node* N..

[자료구조] 이중 연결 리스트 (Doubly Linked List)

[자료구조] 이중 연결 리스트 (Doubly Linked List) 이중 연결 리스트는 단일 연결 리스트와는 다르게 Next뿐만 아니라 Previos도 연결되어있는 양방향 리스트이다. 이 연결 리스트의 장점은 양방향으로 연결이 되어있기 때문에 탐색에 유리하다는 점이다. 즉, 단일 연결리스트는 단방향 탐색이지만 이중 연결 리스트는 양방향 탐색이 가능하다는 것입니다. 하지만 그만큼 양방향을 위해 변수를 추가해서 구조가 복잡해지고 메모리를 더 차지한다는 단점을 가지고 있습니다. 소스코드 구현 (C++) #include using namespace std; struct Node { Node(int data) { Data = data; Prev = Next = NULL; } void Destroy() { dele..

[자료구조] 연결 리스트 (Linked List)

[자료구조] 연결 리스트 (Linked List) 연결 리스트는 각 노드가 데이터와 포인터를 가지고 한줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이며 선형자료구조에 속한다. 종류는 단일 연결 리스트, 이중 연결 리스트, 원형 연결 리스트 등이 있으며 자료의 추가/삭제에 대해 시간 복잡도 O(1)를 갖는다. 하지만 O(N)의 시간이 걸리는 특수한 경우도 존재한다. 일반적으로 리스트의 맨 앞 노드를 헤드(Head), 맨 뒤 노드를 테일(Tail)이라고 부른다. 단일 연결 리스트 (Singly Linked List) 단일 연결 리스트는 각 노드에 자료 공간과 한 개의 포인터 공간이 있고 각 노드의 포인터는 다음 노드를 가리킨다. 즉, 단일 연결 리스트는 한 방향으로만 연결이 되어있으며 연결된 다음 ..

[알고리즘] 다이나믹 프로그래밍 (Dynamic Programming)

[알고리즘] 다이나믹 프로그래밍 (Dynamic Programming) 하나의 문제를 단 한번만 풀도록 하는 알고리즘이다. 피보나치 수열과 같이 한 번 푼것을 여러번 다시 푸는 비효율적인 알고리즘을 개선시키는 방법으로 사용한다. 그리고 다이나믹 프로그래밍은 두가지 가정하에 사용할 수있는데 1) 큰 문제는 작은 문제로 나눌 수 있다. 2) 작은 문제에서 구한 답은 그것을 포함하는 큰 문제에서도 동일하다. 즉, 다이나믹 프로그래밍은 큰 문제를 해결하기 위해서 그것을 작게 나누어 해결한 뒤 그것을 이용하여 답을 구하는 것이다. 하지만 이 과정이 분할정복과 다른 점은 메모제이션(Memozation)이 사용된다는 점이다. 이미 계산한 것을 저장하는 것으로 나중에 동일한 계산을 할 때는 저장된 값을 반환하여 사용하..

[알고리즘] 이진 트리 (Binary Tree)

[알고리즘] 이진 트리 (Binary Tree) 이진트리는 기본적으로 많이 사용되는 비선형 자료구조이다. 기존에 힙에서도 이진트리를 사용했는데 그것은 완전 이진 트리로 배열로 표현이 가능하지만 완전 이진 트리가 아닌 경우는 배열로 표현이 힘들다. 시간 복잡도 이진트리를 탐색 시 계속 1/2로 나뉘어서 계속 탐색하기 때문에 O(log₂N)의 복잡도를 가진다. 이진 트리 탐색 방법 1. 전위 순회 (Preorder Traversal) : 자기 자신 - 왼쪽 자식 - 오른쪽 자식 2. 중위 순회 (Inorder Traversal) : 왼쪽 자식 - 자기 자신 - 오른쪽 자식 3. 후위 순회 (Postorder Traversal) : 왼쪽 자식 - 오른쪽 자식 - 자기 자신 후위 순회는 계산기와 같은 수식에 자..

[알고리즘] 크루스칼 알고리즘 (Kruskal Algorithm)

[알고리즘] 크루스칼 알고리즘 (Kruskal Algorithm) 가장 적은 비용으로 모든 노드를 연결하기 위해 사용하는 알고리즘이다. 즉, 최소 비용 신장 트리를 만들기 위한 대표적인 알고리즘이다. 다음 노드들을 모두 한번씩 들르는 최소 경로를 알아보자! 비용이 짧은 순서대로 그래프에 포함시키자!! 일단 모든 노드를 최대한 적은 비용으로 연결만 시키면 되기 때문에 모든 비용의 정보를 오름차순으로 정렬한 뒤에 비용이 작은 것부터 차근 차근 그래프에 포함시키면 된다. 단 사이클을 형성하는 경우는 포함에서 제외한다. 소스코드 구현 (C++) #include #include #include using namespace std; int GetParent(int parent[], int x) { if (paren..