본문 바로가기

분류 전체보기

(596)
TREAP_INSERTION #include #include using namespace std; typedef int KeyType; typedef struct Node { KeyType key; int priority, size; Node *left, *right; Node(const KeyType& _key) : key(_key), priority(rand()), size(1), left(nullptr), right(nullptr) {} void setLeft(Node* newLeft) { left = newLeft; calcSize(); } void setRight(Node* newRight) { right = newRight; calcSize(); } void calcSize() { size = 1; if (left) si..
FORTRESS #include #include #include using namespace std; typedef struct Node { int x, y, r; int idx; vector childs; Node(int _x, int _y, int _r, int _idx) : x(_x), y(_y), r(_r), idx(_idx) {} } Node; void getLongestLeafPath(Node* const root); int height(Node* const root); bool compareNode(Node* a, Node* b); void PrintPrefix(Node* const root); void Insert(Node* const root, Node* const node); bool IsInside(..
TRAVERSAL #include #include using namespace std; typedef struct node { node* left; node* right; int key; node() { left = nullptr; right = nullptr; key = 0; } } node; vector TraversalPostfix(const node* root); node* GetTree(const vector &prefix, const vector &infix); int main() { int caseNum = 0; cin >> caseNum; int nodeCnt = 0; vector prefix, infix; for (int cIter = 0; cIter < caseNum; cIter++) { prefix.c..
HABIT #include #include #include #include using namespace std; int getMostHabit(string &habit, int minLength); int getCommonPrefixLength(string &s, int startIdx, int endIdx); vector getSuffixArray(string &habit); int main() { int caseNum = 0; cin >> caseNum; int k = 0; string habit = ""; for (int i = 0; i > k; cin.ignore(); std::getline(std::cin, habit); // Process int most = ge..
JAEHASAFE (KMP 알고리즘) #include #include #include using namespace std; int getMaxDup(const string &first, const string &second); vector getPartialMatch(const string &target); int main() { int caseNum = 0; int n = 0, result = 0; string first = "", second = ""; cin >> caseNum; for (int cIter = 0; cIter > n; cin.ignore(); std::getline(std::cin, first); result = 0; for (int spin = 0; spin < n; s..
C++ <-> C# 간 마샬링 시 메모리 할당 및 해제 Win32 API 중 메모리 할당 및 해제를 할 때 LocalAlloc(), LocalFree() 함수를 사용한다. C++ C# 간 마샬링을 할 때 한 쪽에서 LocalAlloc()을 통해 메모리를 할당하고, 다른 한 쪽에서 LocalFree()를 통해 메모리 해제가 가능하다. C#에선 마샬링할 때 Marshal.AllocHGlobal() 을 많이 사용하는데, 이 함수 내부는 Win32 함수인 LocalAlloc()을 호출하는 식으로 구성되어 있다. LocalAlloc(), LocalFree() 와 같은 역할을 하는 Win32 함수로 CoTaskMemAlloc(), CoTaskMemFree() 가 있다. LocalAlloc(), LocalFree() 가 C#의 Marshal.AllocHGlobal(), ..
C# Memory Leak 해결 툴 Memory Leak을 측정하는 방식 중 2가지를 발견하였다. 하나는 perfMon을 사용하는 방식이고, 다른 하나는 Memory Profiler를 사용하는 방식이다. [ perfMon ] 1. Task Manager 는 정확한 성능 상태를 측정하지 못한다. 사용하는 메모리가 아닌 할당된 메모리를 보여주고 그마저도 다른 프로세스에서 사용하고 있을 수 있다. 2. 프로세스에서만 사용하는 메모리를 보기 위해서 private bytes 를 보아야 한다. 이는 performance counter를 통해 볼 수 있다. 3. 메모리 릭이 발생한다면 3가지를 알아보아야 한다. 1) What ? managed 메모리 릭인지, unmanaged 메모리 릭인지 2) How ? connection object 때문인지, 파..
Mosh의 Udemy C# 강의를 듣고나서 끄적이는 메모 [ 초급 ] 1. Class 들을 묶은 개념이 Namespace이다. Namespace 들을 묶은 개념이 Assembly이다. Assembly는 DLL 형태나 EXE 형태로 존재한다. Assemly 들을 묶은 개념이 Application이다. 2. C#에서 코딩할 때 나오는 byte, short, int, long, float, double, decimal, char, bool 키워드들은 C#에서 사용하는 primitive type이다. Byte, Int16, Int32, Int64, Single, Double, Decimal, Char, Boolean 키워드들은 .NET 언어군(C#, F#, VB ..)에서 사용하는 .NET의 primitive type이다. 3. C#에서 "3.4" 와 같이 실수형 값..