전체 글 82

[Data Structures] Hash Table

해시 테이블(Hash Table) 목표 해시 알고리즘에 대한 정의 좋은 해시 알고리즘을 만드는 방법 해시 테이블에서 충돌이 발생하는 경우 이해 개별 체이닝(separte chaining)과 선형 조사법(linear probing)을 이용한 충돌 해결 해시 테이블이란 해시 테이블은 key-value 쌍을 저장하는 데 사용한다. 해시 테이블의 key는 순서를 갖지 않는다.(배열과 달리) 해시 테이블은 값을 찾거나 추가하거나 제거하는 데 빠르다.(배열과 달리) 해시 테이블은 이처럼 속도가 빠르기 때문에 자주 사용되며, 대부분의 프로그래밍 언어에서는 다음과 같이 해시 자료 구조를 갖고 있다. 이들은 모두 key-value 쌍 데이터를 저장하고 해시 테이블을 사용한다. Python: Dictionary Javas..

[Data Structures] Queue

사실 자바스크립트에서 Queue를 독립적으로 자체 제공하지는 않지만 배열(Array)를 이용하여 큐의 기능을 흉내낼 수 있다. 자바스크립트의 배열 내장 메서드 중에는 shift() 라는 메서드가 있는데, 이는 배열의 가장 앞에 있는 원소부터 하나씩 제거하는 기능을 수행한다. 즉 배열의 pop() 메서드의 역방향이라고 볼 수 있다. 큐의 순서는 FIFO(First In First Out) 원칙을 고수하기 때문에 사실 shift() 메서드를 이용하면 해당 원칙을 준수하며 데이터 삽입/제거가 가능하다. 그러나 해당 방식은 근본적인 문제가 있다. 바로 배열을 활용해서 FIFO 원칙을 적용한다는 점인데, 이 부분에서 원래 큐 자료구조의 시간복잡도와 상당한 차이가 발생하게 된다. 배열을 활용한 큐의 구조에서 상당한..

[Data Structures] Linked List2

이어서 연결 리스트의 맨 앞에 데이터를 추가하고 삭제하는 함수를 추가. 맨 앞에 노드를 추가하기 위해서는 HEAD와 연결된 노드(Node) 객체를 생성된 노드(Node) 객체의 다음 노드로 참조시zla. 그리고 HEAD에 생성된 노드(Node) 객체를 참조시킵니다. // 맨 앞에 데이터를 추가하는 함수 this.addFirstNode = function(data) { // 노드 객체 생성 var node = new Node(data); // HEAD가 NULL이면 연결된 노드(Node)가 없는 빈 상태(Empty)이므로 생성된 노드를 참조시킵니다. if (this.isEmpty()) { this.head = node; } else { // HEAD가 NULL이면 연결된 노드(Node)가 없는 빈 상태(E..

[Data Structures] Linked List1

연결(링크드) 리스트(Linked List) ​ 연결 리스트(Linked List)란, 데이터와 포인터로 구성된 노드(Node)들을 연결하는 구조. 노드(Node)는 포인터를 이용하여 다음 노드(Node)와 연결된다. 스택(Stack), 큐(Queue), 덱/데크(Deque, Double-Ended Queue), 원형 큐/환상 큐(Circular Queue)는 버퍼(배열)를 사용하기 때문에 버퍼(배열)에서의 위치 값으로 데이터를 추가하고 가져감. 버퍼(배열)가 아닌 포인터로 연결된 연결 리스트(Linked List)에서는 버퍼(배열)의 위치 값이 아닌 시작 포인터를 가지고 있다. 시작 포인터를 HEAD라고 함. 시작 포인트가 NULL이면 연결된 노드(Node)가 없는 빈 상태(Empty). => 노드(N..

[Part 2] object index signatures

코딩애플 '빠르게 마스터하는 타입스크립트' 강의를 보고 정리한 내용입니다. (본 페이지 주소: https://codingapple.com/course/typescript-crash-course/) object 자료에 타입을 미리 만들어주고 싶은데 1. object 자료에 어떤 속성들이 들어올 수 있는지 아직 모르는 경우 2. 타입지정할 속성이 너무 많은 경우 index signatures 를 사용하면 편리하다. index signatures object 용 타입을 하나 만들고 싶은데 아직 어떤 속성이 들어올지 모름. 그럴 땐 이렇게 작성해보자. interface StringOnly { [key: string]: string } let obj :StringOnly = { name : 'kim', age :..

TypeScript 2023.03.12

[Part 2] implements 키워드

코딩애플 '빠르게 마스터하는 타입스크립트' 강의를 보고 정리한 내용입니다. (본 페이지 주소: https://codingapple.com/course/typescript-crash-course/) interface는 object 타입지정할 때 쓴다고 배웠다. 하지만 용도가 하나 더 있는데 class 타입을 확인하고 싶을 때도 interface 문법을 사용할 수 있음. 근데 implements 키워드도 필요함 implements 키워드 class를 하나 만들어보자. class Car { model : string; price : number = 1000; constructor(a :string){ this.model = a } } let 붕붕이 = new Car('morning'); class Car 로부..

TypeScript 2023.03.12

[Part 2] d.ts 파일 이용하기

코딩애플 '빠르게 마스터하는 타입스크립트' 강의를 보고 정리한 내용입니다. (본 페이지 주소: https://codingapple.com/course/typescript-crash-course/) declare 키워드를 배웠으면 이제 d.ts 파일도 이해가 간다. 코드짜다보면 어디선가 d.ts 파일이 등장한다. 이 파일은 타입만 저장할 수 있는 파일형식. (그래서 definition의 약자인 d가 들어감) 그리고 자바스크립트로 컴파일되지 않는다. 어디다 쓰냐면 1. 타입정의만 따로 저장해놓고 import 해서 쓰려고 2. 프로젝트에서 사용하는 타입을 쭉 정리해놓을 레퍼런스용으로 사용 그렇다^___^ 타입만 따로 d.ts에 모아놓으려면 1. 어쩌구.d.ts 라고 작성하신 파일은 타입 정의만 넣을 수 있다...

TypeScript 2023.03.06

[Part 2] 외부 파일 이용 시 declare & 이상한 특징인 ambient module

코딩애플 '빠르게 마스터하는 타입스크립트' 강의를 보고 정리한 내용입니다. (본 페이지 주소: https://codingapple.com/course/typescript-crash-course/) 코드를 짜다보면 외부 자바스크립트 파일을 이용하는 경우 import 문법으로 가져다가 쓰면 되는데 근데 안타깝게도 그 파일이 Typescript로 작성된게 아니라 JavaScript 로 작성된 파일이면 무수한 에러가 기다리고 있다. 당연히 타입지정이 안되어있으니까. 예를 들어서 data.js 라는 파일이 있다고 치면 그리고 index.ts 파일에서 저기 있던 a라는 변수를 쓰고싶으면 어떻게할까? (data.js) var a = 10; var b = {name :'kim'}; (index.ts) console.l..

TypeScript 2023.03.06

[Part 2] array 자료에 붙일 수 있는 tuple type

코딩애플 '빠르게 마스터하는 타입스크립트' 강의를 보고 정리한 내용입니다. (본 페이지 주소: https://codingapple.com/course/typescript-crash-course/) array 자료에 타입을 지정하고 싶으면 string[] 이렇게 기입한다. 하지만 보다 구체적으로 타입지정하고싶을 때가 있다. "첫 자료는 무조건 string, 둘째 자료는 무조건 number인 array" 이런 것도 가능 => tuple 타입 쓰면 됨. Tuple 타입 tuple type은 array에 붙일 수 있는 타입으로 자료의 위치까지 정확히 지정할 수 있는 타입. let 멍멍이 :[string, boolean]; 멍멍이 = ['dog', true] [ ] 괄호 안에 타입 적으시면 tuple type이 ..

TypeScript 2023.02.17