분류 전체보기
-
JUNGOL...157일지 2021. 11. 3. 10:16
Intermediate_Coder/백트래킹-DFS/DNA 조합 문제 도훈이는 학교에서 배운 유전자 실험을 이용해서 자신만의 실험을 계획하고 있다 (프로그램을 작성해주는 복제인간을 만드는 것이 목표라고 한다). 도훈이가 갖고 있는 DNA 조각은 n(2 TACAGATTA TACA+ACA -> TACA TAC+TACA -> TACA ATAC+TACA -> ATACA TACA+ACAT -> TACAT 입력 형식 첫 줄에 n이 입력되고, 두 번째 줄부터 n개의 줄에 걸쳐 각 DNA 조각이 입력된다. DNA조각의 길이는 1 ~ 7 이다. 출력 형식 첫 번째 줄에 n개의 DNA를 모두 조합해서 하나의 DNA 순열로 만들었을 때 최소 길이를 출력한다. 입력 예 4 | 3 GATTA | ABC TAGG | BCD ATC..
-
알고리즘...80일지 2021. 11. 3. 01:49
형제 노드로 넘기는 처리 기존 코드에서 왼쪽 형제로 키를 넘길 때 기존 노드에서 가장 작은 값을 가져오는데 이때 next를 nullptr로 처리해주지 않아 적절하게 완료되지 않았었다. 노드를 인출할 때 완전히 연결을 끊어줬다. BTreeNode /// /// 가장 작은 키를 노드에서 떼어내 반환한다. /// /// 가장 작은 키 BTreeNodeKey* BTreeNode::GetSmallestKey() { BTreeNodeKey* key{ nullptr }; if (keyRoot != nullptr) { key = keyRoot; keyRoot = keyRoot->next; keyRoot->prev = nullptr; key->next = nullptr; } size--; return key; } 이제 ..
-
유니티 화면 비율 고정 처리...17일지 2021. 11. 2. 22:58
화면 사이즈 변경 처리 방법 코드를 보면 사이즈를 변경한 뒤 직접 사이즈를 설정하는 게 아니라 원래의 WinProc에 변경된 사이즈를 가지고 이벤트를 넘겨주는 방식으로 사이즈를 변경하도록 만들고 있다. 이렇게 한 이유는 기존 WinProc에서 진행되어야 할 이벤트를 빼먹지 않고 진행하도록 하기 위한 것으로 보인다. wndProc // Write back changed window parameters. Marshal.StructureToPtr(rc, lParam, true); } // Call original WindowProc function. return CallWindowProc(oldWndProcPtr, hWnd, msg, wParam, lParam); 또, WinProc의 등록은 단순히 SetWi..
-
JUNGOL...156일지 2021. 11. 2. 21:31
Intermediate_Coder/백트래킹-DFS/DNA 조합 문제 도훈이는 학교에서 배운 유전자 실험을 이용해서 자신만의 실험을 계획하고 있다 (프로그램을 작성해주는 복제인간을 만드는 것이 목표라고 한다). 도훈이가 갖고 있는 DNA 조각은 n(2 TACAGATTA TACA+ACA -> TACA TAC+TACA -> TACA ATAC+TACA -> ATACA TACA+ACAT -> TACAT 입력 형식 첫 줄에 n이 입력되고, 두 번째 줄부터 n개의 줄에 걸쳐 각 DNA 조각이 입력된다. DNA조각의 길이는 1 ~ 7 이다. 출력 형식 첫 번째 줄에 n개의 DNA를 모두 조합해서 하나의 DNA 순열로 만들었을 때 최소 길이를 출력한다. 입력 예 4 | 3 GATTA | ABC TAGG | BCD ATC..
-
알고리즘...79일지 2021. 11. 2. 02:43
디버그를 위한 출력 함수 구현 삽입과 삭제에서 적절하게 처리가 되지 않아 디버깅을 하기 위해 출력 함수를 구현했다. BTree /// /// 트리를 텍스트로 출력한다. /// void BTree::PrintTree() { std::cout left); } std::cout right != nullptr) { _queue.push(key->right); } std::cout value next != nullptr ? ", " : ""); key = key->next; } std::cout
-
알고리즘...78일지 2021. 11. 1. 21:29
B 트리 삭제 메서드 구현 언더 플로우 처리를 구현한다. BTree /// /// 언더플로우가 발생한 노드를 정리한다. /// /// 언더 플로우가 발생한 노드 void BTree::ClearUnderflow(BTreeNode* node) { // 노드가 루트인 경우 if (node == _root) { if (node->size == 0) { _nodeManager.Push(node); _root = nullptr; } } else { bool isDone{ false }; BTreeNode* parent{ node->parent }; BTreeNodeKey* lsKey{ nullptr }; BTreeNodeKey* rsKey{ parent->keyRoot }; while (rsKey != nullpt..
-
알고리즘...77일지 2021. 10. 27. 12:29
삭제 메서드 구현, 부모 노드가 존재하는 경우 처리 노드가 루트인 경우와 노드의 형제에서 키를 인출해 가져올 수 있는 경우를 처리한다. BTree /// /// 언더플로우가 발생한 노드를 정리한다. /// /// 언더 플로우가 발생한 노드 void BTree::ClearUnderflow(BTreeNode* node) { // 노드가 루트인 경우 if (node == _root) { if (node->size == 0) { _nodeManager.Push(node); _root = nullptr; } } else { bool isDone{ false }; BTreeNode* parent{ node->parent }; BTreeNodeKey* lsKey{ nullptr }; BTreeNodeKey* rsKe..
-
알고리즘...76일지 2021. 10. 26. 14:49
삭제 알고리즘 수정 기존 삭제 시 단순히 해당 값을 포함하는 노드를 반환했다면 이번에는 적절한 처리를 위해 해당 노드가 자식 노드가 있으면 오른쪽 서브 트리에서 가장 작은 값을 가진 키의 값과 교환하여 리프 노드에서 삭제가 일어나도록 수정했다. BTreeNodeKey /// /// 주어진 값을 가지는 키를 반환한다. /// /// 찾을 값 /// 값을 가지는 키 BTreeNodeKey* BTreeNode::GetKey(int data) { BTreeNodeKey* key{ keyRoot }; while (key != nullptr) { if (key->value == data) { break; } key = key->next; } return key; } BTree /// /// 주어진 값을 가지는 키를..