참고 : https://cosyp.tistory.com/228 v-table: 함수 포인터가 들어있는 테이블함수 포인터: 함수의 주소를 저장하는 포인터-> 콜백 함수를 위해 많이 쓰인다. v-table은 virtual function이라는 기능을 위해 쓰이고,v-table안에는 함수 포인터들이 배열의 형태로 저장되어있다. Override결과를 보면 상속받은 부모 객체의 함수가 실행되는 것이 아닌 자식 클래스의 객체가 실행되고 있다. 이렇게 상속받은 함수의 자식 클래스에서 재정의하는 것을 Override라고 한다. virtual function또한, Parent 타입의 p 포인터 변수에 Child 객체의 주소를 넣고 실행을 시켜도 Parent 타입의 함수가 호출이 된다. 이는 단순히 함수를 오버라이딩하더라..
1. 연산자 오버로딩위와 같은 연산을 오버로딩을 통해 내가 임의로 진행할 수 있다. 예제로 살펴보자.만약 단순히 3 + 5를 진행한다면 8이라는 값을 얻을 수 있으나,(3 + 5i) + (6 + 8i)와 같이 복소수의 연산을 진행하려면 내가 생각한대로 프로그램이 돌아가지 않을 것이다.그렇기에 연산자 오버로딩을 통해 위와 같은 계산을 진행하고자 한다.123456789101112131415161718192021222324252627282930313233343536373839404142434445#include iostream>using namespace std;class Complex {private: friend Complex operator+(const Complex&, const Complex&)..
이진트리란 자식 노드의 수가 0 ~ 2개인 트리를 말한다. 이를 재귀적으로 표현할 수 있는데, 단일 노드이거나 해당 노드의 자식 노드가 모두 이진 트리라면 해당 노드를 이진트리라고 부른다. 완전이진트리란 이진트리를 채워나갈 때 마지막 노드가 왼쪽부터 차례대로 채워진 트리의 형태이다. 위 그림에서 볼 수 있듯이, internal 노드의 수는 3, external 노드의 수는 3, 높이 h는 2이다. external 노드가 왼쪽부터 차례대로 채워졌으므로 위의 트리는 완전이진트리가 된다. 만약 왼쪽부터 채우다가 오른쪽 끝까지, 즉 external 노드의 수가 2^h개라면 이를 포화이진트리라고 부른다. internal 노드의 수는 3, external 노드의 수는 4, 높이 h는 2이다. external 노드가..
N개의 동전을 가지고 K원을 만드는 경우의 수를 구하는 방법 N = 3, K = 10이며, 1원, 2원, 5원을 무한히 가지고있을때 동전을 사용하여 10원을 만드는 경우의 수를 구하는 문제이다. 단, 중복되는 경우는 제외해야한다 예를 들어, 3원을 만들 때 1원 + 2원 == 2원 + 1원인 경우를 의미한다. 처음에는 2차원 배열을 통해 구현했다 dp[N][K] 에서 N은 각 동전까지 사용했을 때 얻을 수 있는 K원의 경우의 수를 의미한다. dp[0][0] = 1 0원을 만드는 경우의 수는 아무 동전도 사용하지 않을 때라고 생각하면 1가지이다. 또한, 1원까지 사용했을 때 만들 수 있는 K원의 개수 역시 1가지이다. 이를 표로 정리하면 아래와 같다. N | K (i | j) 0 1 2 3 4 5 6 7 ..
집합 N N = { 2, 3, 4 } N의 부분집합을 S라고 할 때, S의 모든 원소의 곱의 합을 구하는 방법 S = { 2 }, { 3 }, { 4 }, { 2, 3 }, { 2, 4 }, { 3, 4 }, { 2, 3, 4 } 1. 원소 개수가 1개인 경우 -> 2 + 3 + 4 = 9 2. 원소 개수가 2개인 경우 -> 2 * 3 + 2 * 4 + 3 * 4 = 26 3. 원소 개수가 3개인 경우 -> 2 * 3 * 4 = 24 모두 더하면 59가 된다 이를 간단히 구해보자 원소 2, 3, 4를 각각 X, Y, Z라고 하면 모든 원소의 곱의 합은 X + Y + Z + XY + XZ + YZ + XYZ가 된다 (곱하기 기호 생략) 즉, ( X + 1 ) * ( Y + 1 ) * ( Z + 1 ) - ..