프로그래밍/ 알고리즘의 복잡도

알고리즘의 복잡도 시간 복잡도 알고리즘의 수행 시간을 분석하는 것. 알고리즘을 구성하는 함수에 따른 수행 시간은 아래와 같다. http://stackoverflow.com/questions/7830727/n-log-n-is-on 시간 복잡도의 표기는 여러개가 있지만, 기본적인 것 3개만 정리한다. O (빅오) 알고리즘 시간의 하한선을 나타내는 표기법. 알고리즘 수행 시간이 아무리 빨라도 비교 함수에 비해 같거나 빠르다. 표기는 대문자 O 다음의 괄호안에 비교하는 함수를 넣는다. ex) O(g(n)), O(n), […]

계속 읽기

프로그래밍/ 재귀함수

함수가 함수 내부에서 자기 자신을 호출 하는 것. 자기호출이라고도 한다. int Fibonacci (int N) { if (N == 1 || N == 2) return 1; else return Fibonacci(N-1) + Fibonacci(N-2); } 재귀는 초기항과 수열을 이루는 규칙을 통해 수열을 간결하게 표현할 수 있는 점화식의 개념을 컴퓨터에서 구현한 것과 같다. 위 함수가 구현하는 피보나치 수열의 점화식은 아래와 […]

계속 읽기

프로그래밍/ 자료구조

트리 각 노드들이 나무처럼 계층 구조를 가진 자료 구조. 상위 노드를 부모, 하위 노드를 자식, 동일 계층의 노드를 형제라고 부른다. http://stackoverflow.com/questions/19330731/tree-implementation-in-java-root-parents-and-children 이진 트리 (Binary Tree) 트리 구조 중에서 자식 노드를 최대 2개까지만 갖는 경우를 이진트리라고 한다. https://en.wikipedia.org/wiki/Binary_tree 이진 검색 트리 (Binary Search Tree) 이진 검색 트리는 이진 트리 중에서 값의 배치를 일정한 규칙에 의거하여 배치한 […]

계속 읽기

프로그래밍/ 디자인 패턴

Singleton Pattern class Singleton { private static Singleton instance; public static Singleton Instance { get { if (instance == null) { instance = new Singleton(); } return instance; } } // 클래스 몸체… } 프로그램 내에서 단 하나의 인스턴스만 존재하는 경우에 사용. ex) 시간 관리. 객체가 생성되지 않은 상태에서도 접근 가능해야 하므로 –null이면 그때 생성한다– […]

계속 읽기

C#/ Exponential Notation

지수 표기법 자리수가 큰 수를 지수를 이용해서 줄여서 표기하는 법을 말한다. 특정 숫자를 Number x 10n 꼴로 만든 후에, 지수인 n을 e 다음에 표기하는 것. 예컨대 12000000000 => 1.2e+9, 0.00000012 => 1.2e-7 같은 식으로 표현된다. 자리수가 큰 숫자를 짧게 줄여 쓰는 표기법. e 다음에 오는 숫자가 양수면 10n 형태이기 때문에 뒤의 숫자만큼 오른쪽으로 소수점을 옮기고, […]

계속 읽기

C#/ Linked List

Linked List의 개념 자료구조에서 배열은 초기화할 때 메모리 크기가 정해지기 때문에 메모리 관리에 뛰어나고 사용도 쉽지만 유연함이 떨어진다. 이에 반해 연결 리스트는 연결이 언제 추가, 삭제될지 모르기 때문에 메모리 상에 이곳저곳에 퍼져있게 되어 메모리 관리의 효율성은 떨어지지만 새로운 연결을 추가하거나 기존 연결을 삭제하는 유연함은 대단히 높다. 연결 리스트는 자기 자신의 데이터 + 다음 노드의 포인터로 […]

계속 읽기

C#/ Using과 IDisposable

Using과 IDisposable C# 에서 메모리는 가비지 컬렉터가 관리해 주지만, 그 외의 열린 파일, 스트림 같은 관리되지 않는 리소스들은 인식하지 못한다. 이런 리소스들은 프로그래머가 명시적으로 해제를 해줘야 하는데 그때 사용하는게 Dispose()이다. 가비지 컬렉터가 제어할 수 없는 리소스를 제어하는 클래스가 IDisposable을 상속 받아 Dispose()를 구현하고 using을 통해 사용하면 된다. public class Book : IDisposable { public void Dispose […]

계속 읽기

C#/ DLL 사용하기

C#에서 만든 DLL 사용하기 C#에서 만들어진 DLL 사용하는 방법은 매우 쉽다. using 키워드로 해당 DLL 을 불러온 후에 일반 클래스 사용하듯이 사용하면 된다. using MyDLL; static void Main (string[] args) { // MyDLL에 정의된 클래스로 객체 정의하기 Calcurate cal = new Calcurate(); int resultAdd = cal.add(1, 2); int resultMinus = cal.minus(5, 3); int resultMultiply = […]

계속 읽기

C#/ String과 StringBuilder

String과 StringBuilder string은 char[]로서 immutable 타입이다. 이것이 무슨 말인고 하니 string에 ‘+’ 연산을 하면, 현재 string에 새로운 string에 더해지는게 아니라, 현재 string과 새로운 string을 더한 새로운 string을 만들어 낸다는 이야기다. 아래와 같은 코드는 loop를 돌 때마다 추가적으로 string을 만들어 낸다. string이 char[]임을 생각해보면 사실 당연한 결과다. string num = “”; for (int i = 0; […]

계속 읽기