Greedy(탐욕법)
·
Algorithm
Greedy각 단계에서 최적이라고 생각되는 것을 선택해 나가는 방식으로 진행하여 최종적인 해답에 도달하는 알고리즘최적의 값을 구해야 하는 상황에서 사용되는 근시안적인 방법론이때, 항상 최적의 값을 보장하는 것이 아니라 최적의 값의 ‘근사한 값’을 목표로 함주로 문제를 분할 가능한 문제들로 분할한 뒤, 각 문제들에 대한 최적 해를 구한 뒤 이를 결합하여 전체 문제의 최적 해를 구하는 경우에 주로 사용 속성탐욕 선택 속성각 단계에서 최선의 선택을 했을 때 전체 문제에 대한 최적 해를 구할 수 있는 경우즉, 각 단계에서 가장 이상적인 선택을 하는 것이 전체적으로 최적의 결과를 가져온다는 것최적 부분 구조전체 문제의 최적 해가 부분 문제의 최적 해로 구성될 수 있는 경우즉, 전체 문제를 작은 부분 문제로 나누어..
Exhaustive Search(완전 탐색)
·
Algorithm
완전 탐색모든 경우의 수를 다 체크해서 정답을 찾는 방법 Brute force단순히 반복문과 조건문으로 모든 경우를 만들어 답을 구하는 방법 Bitmask나올 수 있는 모든 경우의 수가 각각의 원소가 포함되거나, 포함되지 않는 두 가지 선택으로 구성되는 경우 유용하게 사용ex) '원소가 n개인 집합의 모든 부분 집합'을 구한다면, 각 원소가 포함되는지 포함되지 않는 지를 0, 1로 구분하여 배열에 저장해둘 수 있음. 재귀 함수비트마스크와 마찬가지로 각 원소가 두 가지 선택지를 가질 때 유용하게 사용포함이 되면 해당 원소를 넣어 함수를 호출하고, 포함되지 않으면 그 상태에서 함수를 호출하는 등의 식ex) 피보나치 수열 순열서로 다른 N개를 일렬로 나열하는 방법(경우의 수)를 말함.순열의 경우의 수는 N!으..
Sort(정렬)
·
Algorithm
정렬주어진 데이터를 일정한 기준에 따라 순서대로 나열하는 것 버블 정렬(Bubble Sort)비교 기반 정렬, 교환 방식인접한 두 원소를 비교, 자리를 교환하는 방식끝(가장 큰 값)에서부터 채워짐 선택 정렬(Selection Sort)비교 기반 정렬, 교환 방식전체 원소들 중에서 기준 원소를 선택, 교환하는 방식앞(가장 작은 값)에서부터 채워짐 삽입 정렬(Insertion Sort)비교 기반 정렬, 삽입 방식정렬된 부분 집합에 정렬할 새 원소의 위치를 찾아 삽입전체 원소를 정렬된 부분 집합과 정렬되지 않은 부분 집합으로 분할 병합 정렬(Merge Sort)비교 기반 정렬, divide & conquer 방식정렬 대상을 먼저 쪼갠 뒤 각각을 정렬정렬된 부분 집합들을 하나로 결합 힙 정렬(Heap Sort)..
Heap(힙)
·
Algorithm
Heap데이터에서 최댓값과 최솟값을 빠르게 찾기 위해 고안된 완전 이진 트리완전 이진 트리: 이진 트리에 노드를 삽입할 때 왼쪽부터 차례대로 삽입하는 트리(부모 노드의 인덱스) = (자식 노드 인덱스) // 2(왼쪽 자식 노드의 인덱스) = (부모 노드의 인덱스) * 2(오른쪽 자식 노드의 인덱스) = (부모 노드의 인덱스) * 2 + 1중복 허용 종류최대 힙(max heap) : 부모 노드의 값이 자식 노드의 값보다 크거나 같은 완전 이진 트리최소 힙(min heap) : 부모 노드의 값이 자식 노드의 값보다 작거나 같은 완전 이진 트리 동작☁️ 삽입삽입할 노드는 기본적으로 왼쪽 최하단부 노드부터 채워진다.1️⃣ 15를 왼쪽 최하단 노드에 삽입한다.2️⃣ 10을 왼쪽 최하단 노드에 삽입한 뒤, 부모와 ..
Stack/Queue(스택/큐)
·
Algorithm
Stack- 데이터를 하나씩 쌓아 올린 형태의 자료구조- LIFO(Last In First Out) 방식- 리스트의 한 쪽으로 삽입과 삭제 연산 수행top: 스택의 가장 윗부분 (꼭대기)bottom: 스택의 가장 아랫부분 (바닥)push: 데이터를 넣는 작업pop: 데이터를 빼는 작업peek: 스택의 가장 위에 있는 항목 조회empty/full: 스택이 비었는지 가득 찼는지 검사size(level): 스택의 크기 리턴 Queue- 터널 형태의 자료구조- FIFO(First In First Out) 방식- 한 쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 이루어짐front: 큐의 맨 앞, 데이터가 나가는 곳rear: 큐의 맨 뒤, 데이터가 들어오는 곳enqueue: 큐의 뒤에 데이터 추가dequeu..
Hash(해시)
·
Algorithm
Hash입력 데이터를 고정된 길이의 데이터로 변환된 값Hash Table연관 배열 구조를 이용하여 데이터를 Key와 Value로 저장하는 자료구조 [JS] 객체 생성하는 다양한 방법// 객체 리터럴을 이용해서 객체 생성과 동시에 프로퍼티 설정var person = { name : '홍길동', age : 29, print : function(){ console.log('name : ' + name + ', age : ' + age); }}// 객체 생성 후 프로퍼티 추가1var person = {}; //또는 var person = new Object();person.name = '홍길동';person.age = 29;// 객체 생성 후 프로퍼티 추가2person["name"] = ..