본문 바로가기

complex class 구현 Complex Class C++에서 제공하는 연산자 overloading을 이용해서 복소수를 클래스로 구현해보았다.복소수 클래스의 멤버 변수들을 외부에서 변경하지 못하게 하기 위해서 private으로 선언하였으며, 멤버 함수는 사칙 연산 및 입출력에 대한 내용에 대해서만 구현을 하였다. #ifndef COMPLEX_H #define COMPLEX_H #include using namespace std; class Complex{ private: double real; double imag; public: Complex(double real = 0, double imag = 0) : real(real), imag(imag) {} friend Complex operator+(const Complex& c1,..
대소문자 변경하기 문자 하나를 입력받았을 때 그 문자를 대문자로 변경하는 함수와, 소문자로 변경하는 함수를 구현하는 방법은 ascii code를 이용하면 된다. 쉽게 사용할 수 있는 방법은 대문자와 소문자의 ascii code의 차이가 32만큼 난다는 사실을 이용한다는 것이다.즉 대문자인 경우에는 32를 더해주면 소문자로 바꿀 수 있고, 소문자인 경우에는 32를 빼주면 대문자로 바꿀 수 있다. 이것을 C++ 문법으로 표현하면 아래와 같다. char to_lower(char ch){ if(ch >= 'A' && ch = 'a' && ch = 'A' && ch = 'a' && ch
Merge Sort 구현 C++를 이용하여 Merge Sort를 구현한 소스코드이다. Merge를 할 때 원래는 마지막인지 체크를 하고 값을 넣는 과정이 있어야 하지만, 이렇게 하면 코드가 복잡해지기 때문에 합치려는 배열의 사이즈를 1씩 증가시켜서 마지막에 INT형 범위의 최댓값을 넣는 방법으로 구현하였다. #include using namespace std; #define INTMAX 2147483647 void mergeSort(int[], int, int); void merge(int[], int, int, int); int main(){ int *arr, N; cin >> N; arr = new int[N]; for (int i = 0; i < N; i++) cin >> arr[i]; mergeSort(arr, 0, N ..
Tistory 취약점??? 보호되어 있는 글입니다.
2.1 Recursion에 대한 이해 앞선 내용에서는 Maximum Range Sum을 구하는 함수를 구현하고 거기에서 중복되는 연산부분을 없애는 방식으로 수행 속도를 향상시켰다. 이것을 하는데 있어서는 아무런 사전 지식이 없어도 생각을 해본다면 Live하게 짤 수 있는 알고리즘이었다. 이번에는 Recursion이 무엇인지에 대해 살펴보도록 하겠다.Recursion을 한국말로 번역을 하자면 '반복'이라는 뜻을 가지고 있다. 즉 Recursive function은 같은 함수가 반복해서 여러 번 불린다는 뜻을 의미한다. Recursive function을 이용해서 문제를 해결하기 위해서는 기본적으로 Divide & Conquer 전략을 사용한다. 즉, 큰 문제가 있다면 그것을 작은 부분 문제로 쪼개서 해결한 다음 그 결과를 이용해서 큰 문제를 ..
*없이 두 정수 곱하기 모든 컴퓨터 언어에서는 곱하기 연산을 기본적으로 제공해주고 있다. 그런데 만약 '*'가 막혀 있다면 어떻게 계산을 할 수 있을까? C++에서는 정수형 데이터에 대해서 곱하기와 비슷한 연산자인 비트연산자를 제공해주고 있다. 그래서 이것을 이용하면 '*'없이 곱하기를 구현할 수 있다. (다만 매우 비효율적이다..ㅋㅋㅋㅋㅋㅋ 그냥 단순히 비트연산자를 다루는 방법을 터득한다고 생각하고 진행하자. 단순히 '*'문자가 필터링이 되어 있다면 어셈블리로 작성하는 것이 속도 상으로 더 나을수도 있겠다.) int multiply(int a, int b){ int result = 0; int tmp = 0; int sign = 0; // b의 음수여부 if(b < 0){ b = -b; sign = 1; } while(b >..
실습 2주차 [3] Coin Combination 문제 여러 종류의 동전이 있어서 그 동전들을 이용해서 특정한 금액을 만드려고 한다. 처음에 coin 종류의 개수를 입력 받고, 그 다음에는 각 동전마다의 액면가를 입력 받으며, 마지막으로 원하는 가격을 입력한다. 출력해야 할 값은 그 가격을 만들 수 있는 동전의 조합의 개수이다. 여기서 동전의 종류의 개수는 최대 10개까지만 입력한다고 가정하자. 입력 형식{동전 종류 수} 동전1 동전2 동전3 ... 동전n {원하는 가격} Hint : Recursion으로 구현하도록 한다. (Dynamic Programming으로 구현하면 좀 더 빠르게 할 수 있다.) 답안 #include using namespace std; int counting_coin(int[], int, int, int); int main(){..
1.2 Maximum Range Sum (2) 앞에서 사용한 알고리즘의 Time Complexity는 $O(n^3)$이었다. 이것을 줄이기 위해서는 불필요한 연산을 줄이는 것이 가장 먼저 할 수 있는 방법이다. 일단 앞의 알고리즘을 이용해서 작성한 소스코드를 다시 살펴보도록 하자. int getMaximumRange1(int *arr, int size){ int max = INT_MIN; for(int i=0; i