본문 바로가기

개발/C++4

Stack 2개로 Queue 만들기 Stack 2개로 Queue를 만들어보자. Background Stack은 마지막에 저장된 데이터가 가장 먼저 출력되는 LIFO(Last In, First Out)의 특징을 가지고 Queue는 처음에 저장된 데이터가 가장 먼저 출력되는 FIFO(First In, First Out)의 특징을 가진다. Stack 1 [ A / B / C ] 일반적인 경우 이러한 Stack에서는 C -> B -> A의 순서로 출력이 되겠지만 Queue처럼 동작하게 하려면 반대로 먼저 저장된 A -> B -> C의 순서로 출력되도록 해야한다. Stack 2 [ C / B / A ] Stack의 LIFO라는 특징에 충실하게 C -> B -> A의 순서로 출력한 결과를 바로 결과가 아닌 Stack 2라는 임시 공간에 넣은 후 결과.. 2022. 3. 13.
typedef | 구조체 | 구조체 포인터 typedef typedef를 마치 "별명"처럼 사용할 수 있다는 것을 알고 있다. 아래와같이 배열에 대해 typedef를 사용하는 방법도 있으니 알아두자. #include int main() { typedef int Pair[2]; Pair point = {3, 4}; // int point[2] = {3, 4}; printf("(%d %d)\n", point[0], point[1]); } Output (3 4) int point[2]를 사용했을때는 아 그냥 두개짜리 배열이구나.. 했던 내용인데 Pair Point라고 선언함으로써 순서쌍을 나타낸다는 것을 직관적으로 알 수 있다. #include int main() { typedef char *String; String name = "Dood"; // .. 2022. 3. 11.
배열의 주소 | 배열 포인터 | 포인터 배열 배열의 주소 1. ptr = &ptr[0] 2. *ptr = ptr[0] 3. ptr + 1 == ptr에 sizeof(*ptr)을 더한 값 #include int main() { int arr[3] = {1, 2, 3}; printf("arr = %d\n", arr); printf("arr + 1 = %d\n", arr + 1); printf("&arr = %d\n", &arr); printf("&arr + 1 = %d\n", &arr + 1); } &arr + 1의 결과는 &arr(혹은 arr)의 결과에 sizeof(int)와 같은 4가 아닌, 12가 더해진 값이 나온다. 3의 ptr에 &arr를 대입한다면, '&arr + 1 = &arr에 sizeof(*(&arr))을 더한 값'이 되고 이것을 다시.. 2022. 3. 9.
자료구조 / 힙(Heap) 자료구조 힙(Heap)은 최대값이나 최소값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리이다. 힙에는 최상위 루트에 최대값이 들어가는 최대힙, 최상위 루트에 최소값이 들어가는 최소힙이 있으며, 공통적으로 부모노드와 자식노드의 대소관계가 성립하는 특성을 가진다. 최소힙과 최대힙 중 하나를 알면 다른 하나를 이해하는 것은 어렵지 않기 때문에, 최소힙에 노드를 추가하고 삭제하는 방법을 알아보자. 1. 최소힙에 노드 추가하기 마지막 노드에 추가할 값을 넣어준다. 그 후 부모노드와 자식노드의 대소관계가 성립할때까지 자리를 바꿔준다. O(logN)의 시간 복잡도를 가진다. int heap[16]; int hn; // hn : 5 - heap[0] : - heap[1] : 2 - heap[2] : 4 - h.. 2022. 1. 31.