전체 글
-
N개의 수에 대한 최대공약수 구하기컴퓨터 공학 기초/알고리즘 ( algorithm ) 2020. 4. 22. 20:19
유클리드호제법을 이용하여 먼저 0번째와 1번째의 최대공약수를 구한뒤 구한 공약수와 다음 번째 수의 최대공약수를 구하는 방식으로 요소의 마지막 즉 N번째 까지 연산을 수행하게 되면 N개의 숫자의 공통 된 최대공약수를 구할 수 있다. 풀이 // HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include #include #include #include int gcd(int a, int b){ int tmp; while (b > 0){ tmp = a; a = b; b = (tmp % a); } return a; } using namespace std; int main(){ int n, s, nData; int res ..
-
팩토리얼 0의 개수 구하기컴퓨터 공학 기초/알고리즘 ( algorithm ) 2020. 4. 22. 13:08
팩토리얼이란 계승을 의미한다 예를들어 10의 팩토리얼은 1 * 2 * 3 * 4 * 5* 6 * 7 * 8 * 9 * 10 을 의미한다. 현재 구하고 싶은 값은 10 팩토리얼에서 나오는 연속된 0의 갯수이다. 예를들어 10팩토리얼의 값 3628800 이있다면 여기서 가장 뒤의 연속된 0 의 개수를 구하는 것이다. 뒤 자리가 0이 나오기 위해서는 값에 10이 더해지는 수 밖에 없다. 따라서 2 * 5 가 몇번나왔는지만 확인하면 된다. 해결을 하기 위해서는 2가지 방법이 있다. 1. 3628800 을 소인수 분해 하여 총 5가 몇개나오는지 확인하는 방법이 있다. 2. 10의 값을 5로 나누고 몫의 값을 파악하는 방법 + 25 * 1, 25 * 2 와 같이 5 * 5 가 두번 나올 경우를 파악 // Hello..
-
최대공약수 (유클리드호제법) 최소공배수컴퓨터 공학 기초/알고리즘 ( algorithm ) 2020. 4. 21. 12:42
최대공약수란 ? 어떤 수 A 와 B가 있을 때 A 와 B 서로의 약수에서 공통된 수들 중 가장 큰 수를 의미한다. 가장 간단하게 구할 수 있는 방법은 A와 B중 작은 값을 구하여 2부터 작은 값 까지 순회하면서 A와 B의 나머지 연산을 통해 구하는 방법이 있다. 해당 방법은 시간복잡도 o(N) 이라는 시간복잡도를 가지고 있으며 해당 방법보다 빠른 유클리드 호제법이라는 알고리즘이 존재한다. 유클리드호제법의 로직은 다음과 같다. int gcd(int a, int b){ if (b == 0){ return a; } else { return gcd(b, (a%b)); } } int main(){ int aNum, bNum; cin >> aNum; cin >> bNum; cout (16, (24 % 16)) ->..
-
Stack 을 이용한 알고리즘컴퓨터 공학 기초/알고리즘 ( algorithm ) 2020. 4. 13. 13:20
이번 포스트에서는 스텍 자료구조를 활용하여 문제를 해결한다. 스텍의 특성은 선입후출의 특성을 가지고 있다. 문제 1. 스텍 구현 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다. www.acmicpc.net 해결 // Data_struct_c+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include #include #include using namespace std; class STACK{ // ..
-
디폴트 복사생성자의 단점카테고리 없음 2020. 4. 7. 00:12
복사생성자의 단점 복사생성자는 디폴트 생성자와 같이 Class를 만들 때 직접 정의하지 않아도 컴파일러가 알아서 디폴트 복사생성자를 생성해 준다. 하지만 이런 디폴트 복사 생성자는 한가지 단점을 가지고 있는데 그것이 바로 디폴트 복사 생성자는 얕은 복사를 한다는 점이다. 그렇다면 얕은 복사란 무엇일까 ? 얕은 복사 // HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include using namespace std; class Ctest { public: // 디폴트 생성자 Ctest(int n){ p_A = new int; *p_A = n; } // 복사 생성자 Ctest(Ctest &rhs){ this->p_..
-
복사생성자C++ 언어 2020. 4. 6. 22:45
복사생성자란 ? 복사생성자는 말 그대로 객체의 복사본을 생성할 때 호출되는 생성자이다. 기본적으로 객체를 만들면 디폴트 생성자가 실행된다. 이때 만약 객체를 만들긴 만들었지만 해당 객체가 다른 객체의 복사본 으로 생성되었을 경우 복사생성자가 호출되게 되는 것이다. 아래 예시를 보자 // HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include class CMytest { public: // 디폴트 생성자 소멸자 CMytest() { this->m_nData = 10; std::cout m_nData = nParam; } private: int m_nData; }; // 복사 생성자 호출함수 // 매개변수로 C..
-
Class 멤버 함수의 선언 및 정의 분리C++ 언어 2020. 4. 2. 19:16
C 언어 C++ (반환 자료형) (함수 식별자) (매개 변수) (반환 자료형) (해당 함수의 소속 : : 함수 식별자) (매개 변수) 위의 자료는 C와 C++ 의 함수 선언시 기술해야 하는 내용을 표로 정리한 것이다. 기존의 C에서는 함수를 선언시 함수가 반환하는 자료형과 해당 함수의 이름 그리고 매개변수를 기술하면 함수가 선언된다. 하지만 C++ 에서는 Name Space 개념의 등장에 따라 각 함수, 변수 등에게 소속이 생기며 만약 함수가 Name Space에 속해 있을 시 해당 Name Space를 기술하여야 한다. class Test_func { public: Test_func(){ nData = 50; } int nData = 10 ; void test_func(Test_func* test_p)..
-
생성자 함수와 소멸자 함수C++ 언어 2020. 4. 2. 19:04
앞의 포스트를 이해했다면 C++ 에서 나오는 Class 의 개념은 C언어의 구조체와 함수를 묶어놓은 듯한 모양이라는 것을 알 수 있다. 여기서 더 나아가 C++ 에서는 Class 의 생성자와 소멸자 라는 개념의 함수를 지원한다. 생성자 함수에 대해서 살펴보자 생성자 함수란 ? 생성자 함수는 쉽게 말해 Class 의 객체가 생성되면 자동으로 Call 되는 함수를 말한다. 따라서 생성자 함수의 호출 시기는 사용자가 지정할 수 없다. 또한 생성자 함수의 역할은 Class의 멤버에 속한 자료들을 초기화 해주는 역할을 수행한다. 따라서 생성자 함수는 반환값 역시 없다. 아래 예시를 통해 자세히 알아보자 class Test_func { public: // 생성자 함수 // Test_func(){ nData = 50..