본문 바로가기

c++

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 > arr[i]; mergeSort(arr, 0, N ..
*없이 두 정수 곱하기 모든 컴퓨터 언어에서는 곱하기 연산을 기본적으로 제공해주고 있다. 그런데 만약 '*'가 막혀 있다면 어떻게 계산을 할 수 있을까? C++에서는 정수형 데이터에 대해서 곱하기와 비슷한 연산자인 비트연산자를 제공해주고 있다. 그래서 이것을 이용하면 '*'없이 곱하기를 구현할 수 있다. (다만 매우 비효율적이다..ㅋㅋㅋㅋㅋㅋ 그냥 단순히 비트연산자를 다루는 방법을 터득한다고 생각하고 진행하자. 단순히 '*'문자가 필터링이 되어 있다면 어셈블리로 작성하는 것이 속도 상으로 더 나을수도 있겠다.) int multiply(int a, int b){ int result = 0; int tmp = 0; int sign = 0; // b의 음수여부 if(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(){..
실습 2주차 [2] Binary Search 문제10^6개 만큼의 서로 다른 unsigned integer가 정렬된 형태로 input에 들어오고, 다음으로는 10^4개 만큼의 서로 다른 unsigned integer가 들어온다.이 때 처음의 10^6개의 데이터는 배열에 들어가며, 그 다음 input인 10^4개의 데이터에 대해서 binary search를 이용해서 해당하는 인덱스를 반환해서 각각 출력하게 한다.만약 해당하는 값이 없는 경우에는 -1을 반환한다. 입력 형식숫자1 숫자2 ... 숫자1000000숫자1 숫자2 ... 숫자10000 출력 형식 : 인덱스 값을 한 줄에 하나씩 찍도록 한다. 즉 찾는 값이 총 10^4개이므로 출력은 10^4줄에 걸쳐서 나와야 한다. 답안 #include using namespace std; #define SI..
실습 2주차 [1] Greatest Common Divisor 문제 최대 공약수(Greatest Common Divisor)를 Recursive code로 구현하여 100개의 쌍에 대해서 최대 공약수를 출력하도록 한다. 입력의 경우 음이 아닌 정수가 입력되며 N과 0의 최대 공약수는 N을 출력하도록 한다. 입력 형식숫자1 숫자2 숫자3 숫자4 ... 숫자199 숫자200 출력 형식 : 입력된 두 쌍의 숫자에 대해서 각각 최대공약수를 구해서 각 줄마다 출력을 하도록 한다. 답안 #include using namespace std; int gcd(int, int); int main(){ int a, b; for (int i = 0; i > a >> b; cout b) ? b : a; if (t_min == 0) return t_max; ..
실습 1주차 [2] Insertion Sort 문제Insertion sort를 이용해서 주어진 정수들을 오름차순으로 정렬해서 출력한다. 단, 숫자의 개수가 10,000개를 넘지 않는다. 입력 형식(숫자 개수)숫자1 숫자2 ... 숫자N 출력 형식 : 주어진 N개의 숫자를 공백으로 구분하여 오름차순으로 출력 한다. Ex)입력54 7 3 10 1 출력1 3 4 7 10 답안 #include using namespace std; #define MAX_LEN 10000 void insertion_sort(int arr[], int size); int main(){ int N; cin >> N; int arr[MAX_LEN]; for (int i = 0; i > arr[i]; insertion_sort(arr, N); for (in..