목록TDL (119)
\(@^0^@)/
- 유데미 알고리즘 단일 연결 리스트 유데미 강사는 제로베이스 강사와 다르게 class로 연결 리스트를 구현한다. https://dev-minju.tistory.com/193 내가 정리한 건데 왜 잘 모르겠지^^.. 어쨌든 제로베이스 강사의 방식은 append, insert, remove, removeAt으로 노드의 삽입과 삭제를 구현한다. 유데미 강사는 기존의 push, pop, shift, unshift를 이름으로 구현하는데, 사실 이름은 뭘 하든 상관없는 거고 구현 방식이 중요한 거라서 클래스형과 함수형의 구현 방식의 차이에 대해 이해하고, 내가 어떤 방식으로 할 때 더 이해하기 쉬운지 판단해야 할 것 같다. class Node{ constructor(val){ this.val = val; this..
- 유데미 알고리즘 자료 구조 소개 어떤 자료구조를 사용할까? 지도 혹은 위치 정보 관련 작업 => 그래프 어레이지만 앞단으로 신속하게 삽입할 수 있고 끝단에서 쉽게 제거할 수 있는 정렬된 리스트가 필요하다면? => 연결 리스트 연결된 HTML을 걷어내는 웹 작업 혹은 항공사나 호텔의 웹사이트로부터 데이터를 걷어내는 작업 => 트리 우선순위의 태스크들을 작성하는 스케줄러를 작성해야 한다면? => 이진 힙 또는 우선순위 큐 JS에서의 클래스 문법은 기본적으로 진정한 객체 지향이 아니라, 프로토타입 기반 상속자 혹은 프로토타이핑이라 불리는 무엇인가를 이용하는 것이다 클래스들은 인스턴스로 알려진 객체를 생성하기 위한 청사진이며 이런 클래스들은 "new"키워드를 통해 생성되거나 인스턴스화 된다. 생성자 함수는 ..
- 유데미 알고리즘 정렬 각 정렬의 성능 측정 /* 각 sort 성능측정 */ let max = 30000; let arr = []; for (let i = 0; i < max; i++) { arr.push(Math.random() * max); } function benchmark(arr, callback) { let start = Date.now(); callback(arr); return Date.now() - start; } let array = [...arr]; console.log(benchmark(array,quickSort) + "ms") // 27ms console.log(benchmark(array,mergeSort) + "ms") // 37ms console.log(benchmark(..
- 유데미 알고리즘 정렬 function pivot(arr, start = 0, end = arr.length-1) { const swap = (arr, idx1, idx2) => { [arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]]; } let pivot = arr[start]; let swapIdx = start; for(let i = start + 1; i arr[i]) { swapIdx++; swap(arr, swapIdx, i); } } swap(arr, start, swapIdx); return swapIdx; } function quickSort(arr, left = 0, right = arr.length-1) { if(left < right) { let ..
- 제로베이스 알고리즘 정렬 퀵 정렬 (Quick Sort) - 특정한 값을 기준으로 큰 숫자와 작은 숫자를 분할하여 정렬하는 알고리즘 - 평균 시간 복잡도 : O(n log n) - 분할 -> 부분 배열 정렬 -> 전체 정렬 위의 알고리즘 동작 방식은 가장 이해하기 쉽고 심플한 Qsort이다. function swap(arr, idx1, idx2) { let temp = arr[idx1]; arr[idx1] = arr[idx2]; arr[idx2] = temp; } function quickSort(arr, s = 0, e = arr.length - 1) { let start = s; let pivot = arr[e]; for (let i = s; i arr[i]) { swap(arr, start, i..
- 제로베이스 알고리즘 정렬 병합 정렬 (Merge Sort) - 하나의 배열을 두 개의 균등한 크기로 분할하고, 부분 정렬하며, 이를 다시 합하면서 전체를 정렬해가는 알고리즘 - 평균 시간 복잡도 : O(n log n) function mergeSort (arr, compare) { if (arr.length === 1) return arr; let m = (arr.length / 2).toFixed(0); let left = mergeSort(arr.slice(0, m), compare); let right = mergeSort(arr.slice(m), compare); let i = 0, j = 0, k = 0; while (i < left.length && j < right.length) { ar..
- 유데미 알고리즘 정렬 선택 정렬 최적화 코드 변수 lowest를 생성하여 해당 숫자가 이미 lowest인 경우에는 스왑을 하지 않아도 되므로 해당 로직은 스킵해주면, 기존의 코드보다 속도가 빨라진다. function swap (arr, idx1, idx2) { let temp = arr[idx1]; arr[idx1] = arr[idx2]; arr[idx2] = temp; } function selectionSort (arr) { for(let i = 0; i < arr.length; i++) { let lowest = i; for (let j = i+1; j < arr.length; j++) { if(arr[j] < arr[lowest]) { lowest = j; } } if(i !== lowest)..
- 유데미 알고리즘 버블 정렬, 선택 정렬 어제 제로베이스에서 학습한 버블 정렬, 선택 정렬을 udemy 강의와 Hello coding 알고리즘 책으로 복습. Hello coding 그림으로 이해하는 알고리즘 선택 정렬의 예 : 컴퓨터에 음악이 가수 별로 몇 곡이 들었는지 기록되어 있는 목록이 있다고 가정했을 때, 이 목록을 가장 많이 들은 것부터 가장 적게 들은 것 순서로 정렬하여 가장 좋아하는 가수의 순위를 알고 싶을 경우 선택 정렬을 사용할 수 있다. 즉, 배열을 작은 정수에서 큰 정수 순서로 정렬할 때 또는 그 반대.선택 정렬을 매번 실행할 때마다 n개의 항목을 모두 점검할 필요는 없다. 처음에는 n개의 항목을 점검하지만 다음에는 n-1, n-2..., 2, 1로 줄어든다. 평균적으로는 1/2 x..
- 제로베이스 알고리즘 정렬 정렬 : 배열 내 원소들을 번호순이나 사전 순서와 같이 일정한 순서대로 열거하는 알고리즘 대표 정렬 알고리즘 : 거품 정렬, 선택 정렬, 삽입 정렬 : O(n²) 병합 정렬, 퀵 정렬 : O(nlogn) 거품 정렬(Bubble Sort) : 서로 인접한 두 원소를 비교하면서 정렬하는 알고리즘 인접한 두 값을 비교해서 => 더 큰 값으로 교환한다. 1번을 index N 만큼 반복한다. N차례 반복한다. let swap = function (arr, idx_1, idx_2) { let tmp = arr[idx_1]; arr[idx_1] = arr[idx_2]; arr[idx_2] = tmp; } let bubbleSort = function (arr) { for (let i = ..
- CRA없이 React 환경 세팅 Webpack과 HMR파트 블로깅 https://dev-minju.tistory.com/267?category=970123 - 제로베이스 알고리즘 배열 복습 나무 그리기, twoSum 하나의 반복문 안에서 1. 중첩으로 공백을 위한 로직, 2. 별을 위한 로직을 따로 작성해야 한다. - 제로베이스 html/css 강의 Grid 학습 flexbox가 1차원이라면, grid는 2차원 layout. 따라서, 행과 열이 존재함 행과 열의 사이 공백을 gutters라 한다. table을 layout에 사용하면 안된다. grid를 사용해야 함. ex) 사진의 갤러리, 쇼핑사이트의 상품카드 나열 grid-auto-rows : template에 명시적으로 작성하지 못했지만 item이..