일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 알고리즘
- 정규표현식
- 코드스테이츠 메인프로젝트
- 이벤트 루프
- 코드스테이츠
- 자바스크립트
- react js
- javascript
- JavaScript Deep Dive
- 자료구조
- 백준
- sort
- nodejs
- 코딩테스트
- CSS
- 버블정렬
- 프론트엔드
- 재귀함수
- next/Image
- input class
- kakao map api
- OSI 7계층
- 배열
- 페이지네이션
- 유데미
- Native select
- 백준 nodeJS
- primitive type
- MUI
- Node js
- Today
- Total
목록javascript/[Udemy] algorithm & data structure (17)
신입 개발자에서 시니어 개발자가 되기까지
트리 a. 개념 - 고전적인 비선형적 데이터 구조를 의미한다. - 연결리스트처럼 노드로 이루어진 데이터 구조인데, 부모-자식간의 관계가 존재한다.b. 특징 i. 노드는 자식만을 가리킬 수 있으며 형제 노드를 가리킬 수 없다. 또한 둘, 또는 그 이상을 가리킬 수 있음. ii. 루트(트리의 꼭대기에 있는 노드) 또한 하나여야 한다.c. 용어 정리 i. Root - 트리 꼭대기에 있는 노드 ii. Child - Root에서 더 멀리 떨어진 다른 노드에 직접 연결된 노드 iii. parent - child의 반대 개념 iv. Siblings - 같은 부모를 공유하는 노드의 그룹 v. Leaf - children이 없는 노드 vi. Edge - the connection between one node and a..

1. 단일 연결리스트와 차이점 a. Node에 next외에도 prev 프로퍼티가 있다. b. 장점 i. pop 메서드가 훨씬 효율적으로 이루어진다. ii. reverse가 쉽다. c. 단점 i. 메모리가 단일 연결 리스트보다 더 든다. 2. 이중연결리스트의 Big O a. 삽입 : O(1) b. 제거 : O(1) c. 검색 : O(N) d. 접근 : O(N) 3. Node 클래스, 이중연결리스트 클래스 생성 class Node { constructor(val) { this.val = val; this.next = null; this.prev = null; } } class DoublyLinkedList { constructor() { this.head = null; this.tail = null; thi..
시작에 앞서 - class 생성 class Node { constructor(val) { this.val = val; this.next = null; } } class SingleLinked { constructor() { this.head = null; this.tail = null; this.length = 0; } } 아래 메서드들은 class SingleLinked의 메서드들이다. 1. Push push(val) { /* 의사코드 1. 전달된 value로 새로운 노드를 생성한다. 2. 헤드가 없다면 리스트가 비어있으므로 전달된 값을 head와 tail에 할당한다. 3. 리스트가 비어있지 않다면, 마지막 노드의 next를 전달된 값으로 할당한다. length도 추가. 4. */ let newNode..

1. 클래스 a. 개념 i. 사전에 정의된 속성 및 메소드들을 이용해 객체를 생성하기 위한 청사진 ii. 엄격하게 보면 자바스크립트가 클래스를 지원하는 것은 아니다. 자바스크립트에 이미 존재하는 프로토타입 기반 상속자들을 구문적으로 눈속임한 것.b. 인스턴스 i. 클래스 생성자함수로 생성된 객체. Array 생성자함수로 생성된 배열 또한 인스턴스다.c. 클래스 메서드 i. static : 클래스에 종속되는 반면 클래스의 개별 인스턴스 메서드에는 종속적이지 않은 메서드를 생성할 때 사용한다. 한마디로, 인스턴스 없이 호출되는 메서드다.d. 클래스에서의 this i. 클래스로부터 생성된 객체, 즉 실제 인스턴스를 참조한다.2. 싱글 연결 리스트(단일방향 연결리스트) a. 개념 i. what is linked..
1. 로직 a. 합병정렬과 마찬가지로 한 개 이하의 요소를 지닌 배열들이 항상 정렬되어 있다는 것을 이용한다. b. 피벗포인트(pivot)라고 불리는 하나의 요소를 선택하고 이 요소를 기준으로 더 작은 수는 왼쪽, 큰 수는 오른쪽으로 나눈다. 이 때, pivot은 정렬되어 있다.(올바른 위치에 있음). c. 2번의 과정을 왼쪽, 오른쪽에서 다시 반복한다. 2. 피벗 helper 함수 의사코드 a. 배열, start index, end index 이 세 가지를 파라미터로 함수를 작성한다. 기본값은 start는 0, end는 array.length -1 b. 배열의 첫번째를 피벗으로 선택(이건 배열 끝, 중간 혹은 랜덤으로 정할수도 있다.) c. 현재의 피벗 인덱스를 변수로 저장.(마지막까지 피벗의 위치를 ..

1. 개념 a. 정수의 자리수를 이용하여 각 요소간 비교를 하지 않고 요소들을 정렬한다. b. 참고로 이때까지 공부했던 정렬들은 모두 비교 정렬이다. 비교 정렬의 최상의 케이스에서 시간복잡도는 O(n log n)이다. 기수정렬은 비교를 하지 않으므로 속도가 매우 빠르다(시간복잡도: O(log n) ) 2. 로직(getDigit) a. 자릿수 별로 숫자 알아내기(getDigit) i. 숫자를 받아서 문자열로 변환 후 각 인덱스 별로 버킷으로 구분하기. 문자열의 인덱스가 앞에서부터 시작하는 게 문제. =>음수 인덱스 사용해서 해결할 수는 있다. 또한 문자열을 다시 숫자로 바꿔줘야 한다. ii. 또는 10진수임을 활용해 10, 10^2, 10^3 등으로 나누어가면서 계산해서 구하는 방법이 있다.b. 가장 큰 ..
1. 개념 - 버블,삽입,선택정렬에 비해서 매우매우 효율적인 정렬. - 분할, 정렬, 합병의 조합으로 이루어져있다. a. 분할 : 배열을 분할하여 새로운 배열을 만드는데, 배열의 요소가 1개가 될 때까지 배열을 분할한다. length가 8인 배열을 분할하면 8개의 배열이 나와야 한다. b. 정렬과 합병 : 이제 8개로 분할된 배열을 2개씩 합병하는데, 정렬을 시킨다. 마찬가지로 2개씩 합병된 배열을 다시 정렬하면서 4개씩 합병한다. 마지막으로 8개의 요소가 정렬된 하나의 배열로 합병한다. -----------------2. 합병 알고리즘 a. 두 정렬된 배열을 합치는 함수를 만든다.(정렬은 오름차순이든 내림차순이든 통일되어야 한다.) b. 정렬된 두 배열이 주어지면, 함수는 정렬된 새로운 배열을 반환해야..
1. 선택정렬 개념 a. 버블정렬이 큰 값을 배열 끝에 위치시키는 데 반해 선택정렬은 작은 값을 한 번에 하나씩 위치에 배열한다.2. 알고리즘 a. 배열을 끝까지 순회하면서 최소값 하나를 찾는다. 최초의 최소값은 맨 앞의 요소다. 그리고 배열 끝까지 가면, 최소값인 요소와 맨 앞에 위치한 요소의 자리를 바꾼다. b. 그 다음은 배열의 두번째부터 순회를 시작하는데, 최소값은 순회를 시작하는 요소의 값이다. 3. 코드 a. swap코드는 버블정렬과 동일하다. function swap(arr, index1, index2) { [arr[index1], arr[index2]] = [arr[index2], arr[index1]]; } function selectionSort(array) { for (let i = ..