일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- computerscience
- 국비지원
- CS
- 그리디
- Javascript
- 부트캠프
- cpu
- html/css/js
- 자바스크립트
- 패스트캠퍼스
- BFS
- 국비지원취업
- 알고리즘
- 코딩테스트
- 야놀자
- CSS
- github
- 호이스팅
- 컴퓨터공학
- 컴퓨터과학
- 너비우선탐색
- git
- KAKAO
- DFS
- 코테
- 프론트엔드개발자
- js
- 백준
- LinkSnap
- nodejs
- Today
- Total
목록Algorithm/Data Structure (5)
My Boundary As Much As I Experienced
예전 프로젝트에서 github action을 사용할 때 yaml 스크립트를 다룬 적이 있다. 배포 시 작동하며 환경 변수를 firebase hosting에 제공하는 용도로 YAML을 썼던 기억이 있는데.. 그땐 그냥 YAML이라는 생소한 포맷의 스크립트는 뭔가 파이썬 처럼 들여쓰기로 문법 구분하구나. 라고만 생각하고 넘어갔다. 그런데 node.js 파일 모듈을 다루면서 gray-matter라는 라이브러리를 사용하는데 yaml 파일에서 메타데이터를 뽑는 예제를 보고 한 번 정리해야겠다 싶어서 정리한다. YAML의 역사 YAML은 2001년에 Clark Evans, Ingy döt Net, 그리고 Oren Ben-Kiki에 의해 만들어졌다. 이들은 데이터를 직렬화하는 방법으로 XML의 복잡성을 단순화하고자 ..
앞서, 트리구조란? 이전 포스팅에서 본대로 트리구조는 아래와 같이 자바스크립트로 심플하게 구현할 수 있다. 그러나 아래 구조에서는 한 Node에 3개 이상의 자식노드도 제한없이 추가할 수 있다. class Tree { constructor(value) { this.root = new Node(value); } } class Node { children = []; constructor(value) { this.value = value; } push(value) { this.children.push(new Node(value)); } } 그러므로 이진탐색에 쓰이기 위한 트리구조는 좀 더 제약이 필요한데, 실제 구현은 다음 포스팅 때 하겠다. 그전에 일단 이진트리가 무엇인지에 대해 정확히 알아보도록 하자. 이..
트리 구조란? 트리(Tree)는 계층적인 구조를 나타내는 비선형 자료 구조이다. 이 구조는 노드(node)와 간선(edge)의 집합으로 이루어져 있다. 트리에서 한 노드는 부모(parent)와 그 자식(child) 노드들로 구성된다. 트리 구조에서는 최상위 노드를 루트(root) 노드라고 하고, 각 노드는 그 아래에 여러 자식 노드들을 가질 수 있다. 각 노드는 부모 노드로부터 연결된 간선을 통해 접근할 수 있다. 트리에서 각 노드는 서로 다른 자식을 가질 수 있지만, 각 노드는 하나의 부모를 가진다. class Tree { constructor(value) { this.root = new Node(value); } } class Node { children = []; constructor(value) ..
Queue란? "Oh, I'll put this in my watch later queue!" 플레이리스트 큐, 입장 대기 큐 등.. 우리가 직관적으로 아는 그 큐 맞다. 선입선출, 들어온 대로 나가는 리스트인 queue이다. 자바스크립트에서 배열과 shift메소드를 Queue 대용으로 쓰면 안 좋은 이유 자바스크립트 배열을 shift 메소드를 쓰며 queue같이 쓰는 것도 가능하긴 하지만 대규모 데이터를 queue로 처리해야될 때 자바스크립트 배열은 좋은 선택지가 아니다. 왜냐하면 shift()메소드로 특정 인덱스 인자를 제거했을 때, 다음 인덱스에 있는 인자를 해당 빈 인덱스에 끌어오고, 또 다다음것을 다음으로 끌어오고... 이런 O(n)시간복잡도의 재배치가 발생하기 때문이다. 얼마 안 되는 데이터면..
연결 리스트란? 배열과 다르게 Node와 Node의 연결을 이용해서 리스트를 만드는 자료구조. 자바스크립트에 익숙한 사람은 원래 배열이라는 자료형에 갯수 제한 없이 원하는 만큼 다 집어넣을 수 있는 줄 아는데 (그것도 자료형에도 구애받지 않고 넣을 수 있는 줄 안다.. 자료형도 정해야 한다. 기본이 any[]가 아니다.) 원래 배열은 몇 개까지 수납할지 선언할 때 그 갯수를 한정해야 한다. 이러한 배열의 단점을 보안하기 위해 추가나 삭제가 자유로운 리스트를 만들고 싶은 니즈가 있었는데 이를 구현한게 연결 리스트이다. 기본 구조 기본적으로 HEAD와 TAIL 등의 순서가 존재한다. Node라는 유닛으로 구성되어 있고, Node는 실제 데이터 값와 다음 데이터의 참조를 가지고 있다. 아래는 삭제 시의 모습이..