목록코딩 공부/C++ (22)
기록장

오차가 10^-9 이하여야 정답이라는 조건을 무시해버려서 10번은 틀린 것 같다.. # 틀린 코드#include using namespace std;int main(){ float a, b; cin >> a >> b; cout 저기에 double을 써도 소수점 9번째까지 나오지 않는다. #include using namespace std;int main(){ float a, b; cin >> a >> b; cout.precision(9); cout cout.precision(9);소수점 9번째 자리까지 표기한다. 다만 엥? 오차가 난.. 뭘까? 이유는 다음에 알아보도록 하자그래도 정답은 찾아냈다. # 정답 코드double을 추가한다.fixed는 소수점 아래 자리 개수를 고정하기 위한 것이다.#inc..
int list[8] = { 6, 0, 4, 5, 1, 3, 8, 2 } #define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) 선택 정렬 : 가장 작은 숫자를 찾아서 1번째 숫자와 교환, 두 번째로 작은 숫자를 찾아서 2번째 숫자와 교환하는 방식 int list[8] = { 6, 0, 4, 5, 1, 3, 8, 2 } 1. list[1] = 0 과 list[0] = 6을 교환 2. list[4] = 1 과 list[1] = 6을 교환 3. list[7] = 2 와 list[2] = 4를 교환 ... void selection_sort(int list[], int n){ int i, j, least, tmp; for (i = 0; i < n - 1; i++) { least = ..

#include using namespace std; class HeapNode { int key; public: HeapNode(int k = 0) : key(k) {} void setKey(int k) { key = k; } int getKey() { return key; } void display() { cout getParent(i).getKey()) // 루트가 아니고 부모 노드보다 키값이 크면 { node[i] = getParent(i); // 부모를 자신노드로 끌어내림 i /= 2; // 부모노드의 위치 저장 } node[i].setKey(key); // 최종위치에 데이터 복사 } HeapNode remove() { if (isEmpty()) return NULL; HeapNode item ..
1. BinSrchTree 클래스의 search 함수 BinaryNode* BinSrchTree::search(BinaryNode* n, int key) { if (n == NULL) return NULL; // n이 NULL인 경우(= key값을 찾지 못한 경우) if (key getData()) {// key값이 n의 데이터보다 작은 경우 완쪽 서브트리 탐색 n = n->getLeft();// n을 n의 왼쪽 노드로 옮김 search(n, key);// recursion } else if (key > n->getData()) {// key값이 n의 데이터보다 큰 경우 n = n->getRight(); search(n, key); } else {// n의 데이터와 key값이 같은 경우 retu..

주어진 이진 트리는 아래와 같다 순회: BDAGEJHKCFI 1. subtree_insert_after : insert L after A A뒤에 L을 삽입한다. subtree_insert_after(node new) : if (no node.right) put new there else put new as successor(node).left A의 right이 없다면 if문을 실행하라는 뜻. A의 right 노드가 있으므로 if문을 실행하지 않는다. else문을 실행한다. successor(A)는 순회(BDAGEJHKCFI)에서 A뒤에 있는 노드인 G이다. G의 left 노드 자리에 L을 삽입한다. 연산 수행 후 ▶순회: BDALGEJHKCFI ▶트리 형태 2. subtree_delete : delete..

하노이탑의 원판이 n개일 때 재귀함수 코드 #include using namespace std; void hanoiTower(int n, char from, char tmp, char to) { if (n == 1) cout

1. 클래스 설계 교재를 참고하면, 자신의 선행 노드와 자신 사이에 노드를 삽입(과 삭제)하는 건 불가능하고, 자신과 후속 노드 사이에 노드를 삽입(과 삭제)하는 건 가능하다고 말한다. 왜냐하면 자신의 링크 필드에 후속 노드에 대한 정보(주소)가 있기 때문이다. 이 상황에서 만약 간단한 클래스(혹은 구조체)로 노드를 설계한다면, LinkedList 클래스에서 삽입과 삭제 연산을 해야 한다. 이때 LinkedList 클래스의 삽입 연산을 생각해서 써봤다. insertNext(int pos, Node* n) { Node* prev = getEntry(pos - 1); if (prev != NULL && n != NULL) { n->getLink() = prev->getLink(); prev->getLink ..
#include using namespace std; void m(int, int[]); int main() { int x = 1; int y[10]; y[0] = 1; m(x, y); cout

그림으로 간단히 표현해봤다. 파란색 동그라미가 쳐진 공간이 산천어 알이 살아남을 수 있는 공간이다. 나는 stack에 알이 살아남는 공간을 넣거나 빼기로 했다. 예를 들어 height[1]~height[3] 을 보면, index 1 -> 2로 갔을 때 stack에 1을 세 번 push해주고 다시 index 2->3으로 갔을 때 stack에서 한 번 pop해줘서 stack에 1이 두 개가 남도록 한 것이다. *코드 참고사항 preMax = 알을 낳기 전 지나온 바닥 중 제일 높은 바닥의 높이 (ex. 현재 2위치에 있을 때 preMax는 3, 현재 5위치에 있을 때 preMax는 2) now = 현재 위치의 바닥 높이 알이 살아남는 경우별로 조건이 있다. 1. index 1~3 : 임의로 현재 3위치, n..
1. 다음과 같은 문장이 실행되면 i값은 얼마인가? int i = 10; int* p; p = &i; *p = 8; i값은 8이 된다. : 3번 줄에서 포인터 p의 내용에 i의 주소가 저장된다. 따라서 *p는 i의 내용을 가리키므로 i에는 8이 저장된다. 2. 다음과 같은 문장을 수행하고 난 뒤의 a[0]의 값은? void sub(int b[]) { b[0] = 0; } void main() { int a[] = {1,2,3,4,5,6} sub(a); } a[0]의 값은 0이다. sub의 매개변수 b는 포인터이기 때문에 배열의 값을 직접 변경한다. 3. 단순 연결 리스트의 노드들을 노드 포인터 p로 탐색하고자 한다. p가 현재 가리키는 노드에서 다음 노드로 가려면 어떻게 하여야 하는가? ① p++; ② ..