C++ 프로그래밍 58

[자료구조와 알고리즘] C++ : OOP

C++ : Object Oriented Programming (객체지향 언어) Ⅰ. Class의 정의 Ⅱ. OOP의 세 가지 특징 Ⅰ. Class의 정의 1. Class = Member's Varibles + Member's Function 2. Class = State (상태) + Method (행위) 3. Class = type, Object = Class's Instance Ⅱ. OOP의 세 가지 특징 (Object Oriented Programming) 1. Encapsulation (캡슐화) 2. Inheritance (상속) 3. Polymorphism (다형성) 1. Encapsulation (캡슐화) 상태와 행위를 가지는 객체로 모델링하는 것을 의미한다. 정보숨기기(Information H..

[자료구조와 알고리즘] C++ : C의 확장

C++ : C의 확장 이번 글에서는 앞서 다뤘던 C++ 기초 문법에 대한 내용들을 다시 한번 정리해 볼 것이다. ① Pointer vs Reference ② 새로운 메모리 할당 ③ Fuction Overloading ④ Default Parameter ⑤ Template ⑥ 기타 ① Pointer vs Reference Pointer란? : 메모리의 주소를 가리키는 변수이다. 32bit 환경에서 4byte의 크기를 가진다. Pointer의 규정요소? 주소(Address)와 유형(Type)으로 이루어져 있으며, 주소만 있는 포인터를 void pointer라고 한다. Pointer 연산 ① * : dereference operator ② & : address of operator ③ Pointer ± Int..

[자료구조와 알고리즘] C++ 언어의 역사와 개요

C++ 언어의 역사와 개요 ① 프로그래밍언어의 역사 ② C++언어의 구조 ① 프로그래밍언어의 역사 프로그래밍 언어란? 컴퓨터를 위한 상세 작업 명세서를 의미한다. 기계중심에서 사람중심으로 변화했다. Low Level Language 기계어(Machine Language)란? CPU가 궁극적으로 이해하는 유일한 언어이다. Operator와 Operand로 이루어져 있다. ※ *Assembly Language 예시 Operator Operand mov ax 35 1ch int 2 1h mov word ptr OldInt1c bx mov ax es mov word ptr Assembly Language란? 숫자를 이해하기 쉬운 Symbol로 대치한 것이다.(DXF 같은 것을 말하는 것 같다) Macro 등의 ..

[자료구조와 알고리즘] C++ 언어 Review

C++ 언어 Review [목차] ① C++ 언어의 역사와 개요 - 프로그래밍 언어의 패러다임 변화 ② C의 확장언어로서의 C++ 살펴보기 - 포인터와 레퍼런스 - 새로운 메모리 할당 - Fuction Overloading, Template ③ 객체 지향언어로서의 C++ 살펴보기 - OOP의 개념과 실습 (Object Oriented Programming) ※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다. https://inf.run/LNCU

[자료구조와 알고리즘] 소수 알고리즘 (Prime Number Algorithm)

소수 알고리즘 (Prime Number Algorithm) 소수를 구하기 위한 알고리즘은 어떻게 구현해야 할까? 크게 아래 두 가지 방법으로 가능하다. ① 소수 판별 알고리즘 ② 에라토스테네스의 체 ※ 소수(Prime Number) 1과 자기 자신 외에는 나누어 떨어지는 정수가 없는 양의 정수 ex) 2, 3, 5, 7, 11, 13 ... ① 소수 판별 알고리즘 소수를 구하는 알고리즘은 소수를 판별하고자 하는 정수 N에 대해, 아래 두 가지 방법으로 가능하다. - 2 ~ (N - 1)까지의 정수로 나누는 방법: O(N) int is_prime(int n) { int i; for (i = 2; i < n; i++) { if (n % i == 0) { return false;//소수가 아니다 } } ret..

[자료구조와 알고리즘] 유클리드 알고리즘 (Euclidean Algorithm)

유클리드 알고리즘 (Euclidean Algorithm) 유클리드 알고리즘이란 두 개의 자연수 또는 정수의 최대공약수를 구하는 것이다. ① 최대공약수 찾기 ② 유클리드 알고리즘을 C++로 구현하기 ③ 유클리드 알고리즘의 개선 ① 최대공약수 찾기 (GCD) 최대공약수 (Greatest Common Divisor) : 주어지는 두 정수의 약수 중에서 가장 큰 공통약수를 의미한다 ※ 예시 280과 30의 GCD를 구하려면? 1. 모든 약수 구하기 280 약수 1 2 4 5 7 8 10 14 20 30 약수 1 2 3 4 5 6 10 15 30 2. 소인수분해 (이는 직관에 의존하는 방법이므로 컴퓨터에는 부적절하다) GCD = 2 X 5 = 10 ② 유클리드 알고리즘을 C++로 구현하기 모든 약수를 구하거나 소..

[자료구조와 알고리즘] 알고리즘 분석

알고리즘 분석 1. 경험적, 수학적 분석 2. 최악, 최선의 경우 3. 알고리즘 유형 4. 알고리즘 성능 표기법 1. 경험적, 수학적 분석 알고리즘의 분석은 실행 시간,공간(메모리 등) 등의 소요량에 따라 최적의 알고리즘을 선택하기 위해 선행되는 것이다. ① 경험적 분석 (Empirical Analysis) - 실제 코드를 작성한 후, 실행 시간을 측정하는 방식이다 - 데이터 수를 다르게 하여 함수간의 관계를 유추한다 ※ 예시 N 250 500 1000 2000 4000 실행시간 2 47 186 736 2421 만약 위와 같은 "자료 N의 수에 따른 실행시간" 테이블이 있다고 했을 때, 맨 처음 N이 5배 증가했을 시 실행 시간은 25배 증가, 그 다음으로 N이 2배 증가했을 시엔 실행 시간이 3배 증가..

[C++ 기초 문법] 동적결합 Class Array

동적결합 Class Array 기초 클래스와 파생 클래스를 하나의 배열(Array)에 결합하여 변수를 초기화 해보자 [time.h] #include #ifndef TIMEH #define TIMEH class Time //기초 클래스 { private: int hours; int mins; public: Time(); Time(int, int); void addHours(int); void addMins(int); Time operator+(Time&); Time operator*(int); virtual void show(); virtual ~Time(); int getHour() { return hours; } int getMins() { return mins; } friend Time operato..

[C++ 기초 문법] 상속(Inheritance) virtual, public 다형

상속(Inheritance) virtual, public 다형 상속된 파생클래스에서 기초 클래스에 있는 public 함수를 사용하려면 어떻게 해야할까? 이전 글에서 알아본 Time 기초 클래스의 파생클래스인 NewTime에서도 Time 기초 클래스의 출력함수인 void show로 출력하려면 어떻게 해야할까? 기존 [time.h]에서는, Time 클래스는 show 함수로, NewTime 클래스는 print 함수로 클래스 멤버를 출력하였다. #include #ifndef TIMEH #define TIMEH class Time //기초 클래스 { private: int hours; int mins; public: Time(); Time(int, int); void addHours(int); void addMi..