728x90
728x90
재귀호출(recursive call)이란? 재귀호출(recursive call)이란 함수 내부에서 자기 자신을 반복적으로 호출하는 것을 의미한다. 반복 행위를 하는 함수를 재귀함수(recursive function)라고 한다. 일반적인 상황에서는 잘 사용하지 않지만 알고리즘을 구현할 때 매우 유용하다. 알고리즘에 따라서 반복문으로 구현한 코드보다 재귀호출로 구현한 코드가 더 직관적이고 이해하기 쉽다. 복잡한 문제를 빠르고 쉽게 해결할 수 있다. - 팩토리얼(Factorial) 정규식 f(n) = n * (n-1) //단, f(1) = 1 //5! = 5 x 4 x 3 x 2 x 1 = 120 public int FuncFactorial(int nNumber) { int nResult = 0; if(nNu..
해쉬테이블(Hashtable) - Key 값을 Hash 함수에 넣어 코드값으로 변경한 후 Bucket이라는 저장 공간에 인덱스 번호를 매핑하여 데이터를 저장 하는 것 - Hash Collision 발생 시(값끼리 충돌) Seperate chaining(Liked List로 노드 연결)으로 해결, Open addressing(빈 버킷 사 용) .Net의 HashTable과 Dictionary의 특징 - 키를 가지고 빠르게 값에 접근하기에 좋다 - 순서나 중복되는 데이터가 있는 경우에는 맞지 않다 - 미리 저장공간을 확보하기 때문에 메모리 효율이 좋지 않다 - 일반적으로 Dictionary를 더 많이 사용한다.(제네릭) using System; using System.Collections; using Sys..
큐(Queue)란? - 선입선출(先入先出) 구조 - FIFO(First-In-First-Out) Enqueue와 Dequeue - Enqueue : 저장공간에 데이터를 집어넣는 행위 - Dequeue : 저장공간에서 데이터를 빼내는 행위 - Stack과 다르게 데이터 입/출구가 다르다(Rear / Front) Enqueue Dequeue 배열로 구현 인덱스가 꽉 차면 더 이상 데이터가 입력되지 않는다.(OutofIndexLayer 출력) 인덱스 = Rear % 배열의 크기 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace queue..
스택(Stack)이란 - Stack : 쌓다의 의미 - 후입선출(後入先出) 구조 - LIFO(Last - In - First - Out) - 휴대폰 앱의 화면 이동 방식 / 브라우저의 뒤로가기 / Ctrl+Z(Undo) - 스택은 한 번에 한 개의 데이터만 꺼낼 수 있다(하나씩 꺼낸다) - Push(삽입)와 Pop(삭제) - Push(Data) : 저장공간에 데이터를 집어넣는 행위 스택에 데이터가 꽉 차면 오버플로우(Overflow) 현상이 발생. IsFull() 함수로 확인할 수 있음 - Pop() : 저장공간에서 데이터를 빼내는 행위, 최상단의 데이터를 가리킴 스택에 데이터가 비게 되면 언더플로우(Underflow) 현상이 발생. IsEmpty() 함수로 확인할 수 있음 - Peek() : 스택의 최..
연결리스트(Linked List) 단순 연결 리스트(Singly Linked List) : 모든 데이터 타입을 가져올 수 있음 - ArrayList는 중간에 데이터를 추가/삭제 시 맨 뒤에 새로운 칸을 생성 후 한 칸씩 밀어내서 작업(시간이 오래걸림) - Linked List는 중간에 데이터를 바로 추가/삭제 할 수 있기 때문에 작업이 빠름 - 추가 데이터에 대한 연산 불필요, 구현의 어려움, 탐색 연산의 비용이 높음 이중 연결리스트(Doubly Linked List) - 양방향 탐색이 가능 - 노드에 이전 노드와 다음 노드를 가리키는 포인터를 가지고 있다. LinkedList number = new LinkedList(); number.AddFirst(10); //10 number.AddLast(20)..
ArrayList : 내부적으로 배열을 사용 LinkedList : 링크 포인터를 사용 List : 제네릭 타입 배열의 특징 - 생성 시 사용할 공간을 미리 할당한다. - 인덱스를 사용 데이터 접근에 빠르다. - 데이터의 크기를 변경하지 못한다. 리스트의 특징 - 데이터의 추가 삭제가 자유롭다. - 생성 시 크기를 지정하지 않는다. - 리스트를 다른 말로 Dynamic Array라고 부른다. ArrayList의 특징 - 데이터의 크기가 정해져 있지 않고, 동적으로 삽입과 삭제가 가능 - 데이터 타입에 관계 없이 삽입이 가능(object 타입) - 배열보다 속도가 느리다 - ArrayList.Insert(int index, object value); list.Insert(3,4); - ArrayList.R..