유클리드 호제법(Euclidean method of mutual division) : 두 정수의 최대 공약수(Greatest Common Divisor)를 재귀적으로 구하는 방법
07 재귀와 순차곱셈(Factorial)
·
Programming Languages/C
재귀(recursive)란? : 순차곱셈(Factorial) :음이 아닌 정수 n의 순사곱셈(n!) 정의 1. 0! = 1 2. n > 0 이면, n! = n x (n-1)! = 10! = 10 x 9! = 10 x 9 x 8! = 10 x 9 x 8 x 7! ...
06 큐
·
Programming Languages/C
큐(Queue)란? : "대기열" : 스택과 마찬가지로 데이터를 일시적으로 저장하기 위한 자료구조 : 큐의 출력 순서 : 선입선출(FIFO, Fisrt In First Out), 가장 먼저 넣은 데이터를 가장 먼저 꺼낸다. 인큐(enqueue): 큐에 데이터를 넣는 작업 디큐(dequeue): 큐에 데이터를 꺼내는 작업 배열을 통한 인큐 디큐 복잡도 데이터를 꺼낼때마다 효율이 떨어진다. 링 버퍼 구조를 통한 디큐 복잡도 향상 링 버퍼 구성도 프런트(front): 맨 처음 요소의 인덱스 리어(rear): 맨 끝 요소 하나 뒤의 인덱스(= 인큐 위치) 인큐와 디큐 수행시, 프런트와 리어 값을 업데이트하면 앞서 발생한 요소 이동 문제를 해결하고 복잡도를 O(1)이 된다. + 오래된 데이터를 버리는 용도
05 Stack
·
Programming Languages/C
스택(Stack)이란? : "겹겹이 쌓음" : 데이터를 일시적으로 저장하기 위해 사용하는 자료구조 : C 언어 프로그램에서 함수 호출, 실행시 내부에서 스택 구조를 사용한다. 스택의 출력 순서 : 후입선출(LIFO, Last In, First Out), 마지막에 넣은 데이터를 가장 먼저 꺼낸다. 푸시(Push): 스택에 데이터를 넣는 작업 팝(Pop): 스택에서 데이터를 꺼내는 작업 함수의 호출과 실행 과정
04 bsearch
·
Programming Languages/C
비교 함수 대소 관계 판단 방법은 요소의 자료형마다 다르기에 사용자가 직접 작성한다. (문자열, 구조체 등) 잘못된 비교 함수 예를 들어, int형의 표현 범위(-32,768 ~ 32,767)에서 벗어난 값 -30,000 - 10,000 등의 제대로 된 결과를 얻을 수 없다.
03 복잡도
·
Programming Languages/C
복잡도 프로그램의 실행 속도는 동작하는 하드웨어나 컴파일러 등의 조건에 따라 다르다. 알고리즘의 성능을 객관적으로 평가하는 기준은 복잡도(Complexity)다. 1. 시간 복잡도(Time Complexity): 실행에 필요한 시간을 평가한 것 2. 공간 복잡도(Space Complexity): 기억 영역과 파일 공간이 얼마나 필요한가를 평가한 것 선형검색 알고리즘의 복잡도 1, 4, 6의 경우, 한번만 실행하기 때문에 복잡도를 O(1)으로 표기 2, 3, 6의 경우, 평균 실행 횟수는 n/2이다. 복잡도를 O(n)으로 표기 O(n)에 필요한 계산 시간은 n에 비례하여 점점 길어진다. O(1)에 필요한 계산 시간은 변하지 않는다. 2개 이상의 복잡도로 구성된 알고리즘의 전체 복잡도는 가장 높은 복잡도를 ..
02 선형 검색
·
Programming Languages/C
검색이란? : 검색이란 어떤 조건을 만족하는 데이터를 찾는 것이다. 검색과 키 : 어떤 검색에서도 특정 항목(Key)을 주목한다는 것은 "검색"의 공통점이다. 선형 검색(Linear Search) - 정렬되지 않은 배열에서 key와 일치하는 요소를 검색하는 유일한 방법이다. - 선형(= 순차 Sequential)검색은 앞부터 순서대로 원하는 키 값을 만날 때까지 요소를 검색한다. 선형 검색 - 보초법(Sentinel Method) 이진 검색(Binary Search) - 정렬된(오름차순, 내림차순) 요소의 배열에서 검색하는 알고리즘입니다. - 선형 검색보다 빠르다. - 이진 검색 알고리즘 종료 조건
08 Interface 09 Property
·
Programming Languages/C#
8. Interface * 왜 쓰는지를 궁금해하는 사람이 많다면, "왜 잘못 사용되고 있는지", "어떻게 하면 제대로 사용될지"를 고민할 것 No. Cat. Class Abstract Class Interface 1 목적 OOP 직접 인스턴싱 금지 추상 매서드 오버라이딩 필수 동일한 메서드를 가진 객체 보장 다중 상속 2 기본 한정자 private private (추상 메서드: public) public 3 인스턴싱 O X X 4 구현부 O (필수) O (선택) X (기본 구현체 예외) 5 중첩 상속 O (클래스 > 클래스) O (추상 클래스 > 추상 클래스) O (인터페이스 > 인터페이스) 6 다중 상속 X (Containment) X O (중복될 구현부가 없다) 7 참조형 선언 O (Object ob..
06 Method 07 Class
·
Programming Languages/C#
기본 개념 * OOP(Object-oriented programming)를 설명하고, PP(Procedural Programming)와 비교 할 수 있는가? * 프로그래밍 대상을 클래스화 시키고, 객체(인스턴스)를 만들어 메서드를 사용할 수 있는가? * 클래스와 인스턴스(객체)의 논리적 개념을 구분 할 수 있는가? - OOP란? : 코드 내의 모든 것을 Object(객체)로 표현하고자 하는 programming paradigm : Encapsulation, Inheritance, Polymorphism - Object(객체)란? : (현실의) 세상 모든 것 : (프로그래밍에서) Class(클래스) 복사본이 메모리에 로드된 상태(= instance) - Class(클래스)란? : (현실의) Object(객..
용어 정리
·
Programming Languages/C
특징 1. C언어에 없는 기능은, C++, C#, Java 등에서 추가되어 자원소모가 클 기능이다. 2. 3. 용어 - 저급 언어(low-level language)와 고급 언어(high-level language) - 기계어(machine language)와 어셈블리어(assembly language) - 명령형 프로그램(Imperative program) - 절차 지향 프로그래밍 언어(procedure-oriented programming language) - 객체 지향 프로그래밍 언어(object-oriented programming language) - 순자적(concatenate) - 변수(variable) - 매개변수(parameter) - 실인수(argument) - 명령문(statement..
성공, 실패 (수정중)
·
Programming Languages/C
if 성공/실패 선택 try 성공 고정 catch if 실패만 표현하고 싶은 경우 1. return 0; 성공은 return 0; ISO(국제표준화기구)에서 지정한, 성공에 대한 반환값은 0이다. 대표적으로 main( ) 함수 실행 성공에 대해 return 0; 이다. 그리고 대다수의 함수에서 성공값이 0이다. 고로 return 0을 반환시 "성공"을 기준으로 코드 구조를 구현할 당위성이 충분하다. 2. return 0; 과 논리 연산 논리 연산에서 True와 False의 의미는 아래와 같다. True (참) = 0을 제외한 모든 값이다. False (거짓) = 0 여기서 0을 부정, 거짓, 실패로 인식하여 return 0을 실패로 혼동하는 문제가 발생하는 것 같다. 이런 문제는 if( ) 사용시, 제어..
01 알고리즘이란?
·
Programming Languages/C
알고리즘이 필요한 이유 알고리즘은, 수학 공식이 아닌 명확하게 정의된 문제에 대한 논리적인 해결 방안이다. "프로그래밍 문제"의 하나의 해결"수단"으로 수학적 방법이 사용되었을 뿐이다. 간단한 예로, "세값의 최대값을 구하는 방법"의 논리적 해결방안이 알고리즘이다. 대다수의 유사한 문제점에 대해 비슷한 해결방안을 갖는다. 예) 세값의 최대값을 구하는 알고리즘 알고리즘의 선택 만약 데이터 집합에서 검색만 생각한다면, 계산 시간이 가장 짧은 알고리즘을 선택하면 된다. 하지만 데이터의 추가, 변경, 삭제 등이 잦다면, 검색 이외의 작업에 소요되는 비용을 종합적으로 평가하여 알고리즘을 선택해야 한다. 기본적으로 알고리즘의 목적과, 실행 속도, 자료구조 등을 고려해 알고리즘을 선택한다.