분류 전체보기 92

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

Insertion Sort (삽입 정렬)

Insertion Sort란 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 배열을 정렬한다. function swap(arr, idx1, idx2) { let temp = arr[idx1]; arr[idx1] = arr[idx2]; arr[idx2] = temp; } // insertionSort가 아니라 이상하게 bubble sort처럼? 해버림 // function insertionSort(arr) { // for (let i = 1; i 0; j--) { // if (arr[j] < arr[j - 1]) { // swap(arr, j, j - 1); // } // } // } //..

Algorithm 2022.08.07

정렬 알고리즘 소개

정렬 알고리즘이란? Collection의 항목을 재배열하는 과정 15개의 정렬 알고리즘 영상 (소리 주의!) https://www.youtube.com/watch?v=kPRA0W1kECg 정렬 알고리즘을 배워야 하는 이유 1. 정렬이 프로그래밍에서 흔하게 사용되기 때문. 2. 몇몇 알고리즘이 객관적으로 나머지보다 빠르기는 하지만, 특정 상황에서는 어떤 알고리즘이 더 빠르기 때문. 3. 정렬은 전형적인 면접 주제 정렬 알고리즘 애니메이션 (삽입, 선택, 버블, 셸, 합병, 힙, 퀵) https://www.toptal.com/developers/sorting-algorithms Sorting Algorithms Animations Animation, code, analysis, and discussion o..

Algorithm 2022.08.06