Algorithm 43

Tree (트리 구조)

Lists - linear (선형) Trees - nonlinear (비선형) Tree란? 노드들이 나뭇가지처럼 연결된 비선형 계층적 자료구조 Tree structure terminology (Tree 구조에서의 용어 정리) Root - The top node in a tree (Node 1) Child - A node directly connected to another node when moving away from the Root. Parent - The converse notion of a child. Siblings - A group of nodes with the same parent. Leaf - A node with no children. Edge - The Connection betwee..

Algorithm 2022.09.22

Doubly Linked List (양방향 연결리스트)

Doubly Linked List 와 Singly Linked List 차이 - Doubly Linked List는 이전 노드를 가리키는 포인터가 있다. - 이전 노드를 가리키는 포인터를 가짐으로써 메모리를 조금 더 사용하지만, Singly Linked List 에 비해 node 탐색을 더 빨리 할 수 있다. /** * Doubly Linked List * * push(value) method : Adding a node ffrom the end of the Doulby Linked List. * - Create a new node with the value passed to the function. * - If the head property is null set the head and tail to ..

Algorithm 2022.09.11

Singly Linked List (단방향 연결리스트)

Array 와 Linked List의 차이 Array : 각 data element(이하 node) 들은 번호에 의해 index 가 부여된다. 새로운 node를 추가할 때 마다, 그 위치에 따른 Index가 주어진다. Linked List : 다음 node를 가리키는 index없이 그냥 다수의 node들로 구성된다. (5번째 데이터를 찾기 위해서는 첫번째 데이터 부터 순서대로 접근해야 한다.) node 특징 - 각 node들은 다음 node를 가리키는 정보를 저장하고 있어야 한다. - 더 이상 다음 node가 없을 경우 null을 저장한다. (체인처럼) - 첫번째 node를 head, 마지막 node를 tail이라 한다. - 배열과 달리 제일 앞 지점에 node를 추가하는 것이 어렵지 않다. - 중간이나..

Algorithm 2022.09.01

Class Method 간단 설명

- Class 들은 instance 로 알려진 객체를 생성하기 위한 청사진 - 이런 Class 들은 "new" 키워드를 통해 생성되거나 인스턴스화된다. - constructor() (constructor fucntion) 은 class 가 instance화 될 때 동작하는 특별한 function이다. - "new" 를 통해 "Student" 클래스를 instance화 시키게 되면 "Student"의 constructor가 먼저 동작하게 된다. - instance method 는 method 혹은 객체와 유사한 방식으로 클래스에 추가될 수 있으며, class method는 "static" 키워드 와 함께 추가될 수 있다. class Student { constructor(firstName, lastName..

Algorithm 2022.09.01

Radix Sort (기수 정렬)

Radix Sort(기수정렬) -> 다른 정렬알고리즘 처럼 두 수의 크기로 비교하는 것이 아니라, 자릿수로 비교하는 알고리즘 (버킷을 사용) (1000 과 12323 를 비교했을때 1000은 4자리, 12323은 5자리 숫자 인 것으로 비교) 10진수니깐 버킷을 10개 (0~9 버킷) 으로 시작한다. // number의 idx(자릿수)에 해당하는 숫자를 리턴 function getDigit(number, idx) { /** * Math.floor : 내림 * Math.abs : 절대값 반환 : number가 음수인 경우일 때를 대비 * Math.pow : 거듭제곱 */ return Math.floor(Math.abs(number) / Math.pow(10, idx)) % 10; } // 자릿수가 몇인지 ..

Algorithm 2022.08.20

Quick Sort (퀵 정렬)

Quick Sort 란? 하나의 배열을 피벗(pivot)을 기준으로 두 개의 배열로 분할하고,(피벗을 기준으로 큰건 오른쪽, 작은건 왼쪽) 분할된 배열을 정렬한 다음, 정렬된 두 배열을 합하여 전체가 정렬된 배열이 되게 하는 정렬 알고리즘. // 배열의 첫번째값을 기준(pivot)으로 잡고 왼쪽은 pivot보다 작은거, 오른쪽은 pivot보다 큰걸로 정렬 function pivot(arr, sidx = 0, eidx = arr.length - 1) { let pivot = arr[sidx]; let swapIdx = sidx; for (let i = sidx + 1; i arr[i]) { swapIdx++; swap(arr, swapIdx, i); } } swap(arr, swapIdx, sidx);..

Algorithm 2022.08.14

Merge Sort (합병 정렬)

합병 정렬이란 배열의 길이가 0 또는 1이 될때 까지 나누고 (배열의 길이가 0 또는 1이면 이미 정렬된 것으로 봄) 나눠진 배열을 다시 합병하면서 정렬하는 것이다. 같은 색깔끼리 같은 하나의 정렬된 배열 구현 방법 1. merge 하는 함수 작성 function merge(arr1, arr2) { const mergedArr = []; let i = 0; let j = 0; while (i arr2[j]) { mergedArr.push(arr2[j]); j++; } else { mergedArr.push(..

Algorithm 2022.08.07