전체 글 527

알고리즘 이론 깨부수기 Hash Table

Hash Table Hash는 내부적으로 배열을 사용하여 데이터를 저장하기 때문에 빠른 검색 속도를 갖습니다. 특정한 값을 search하는데 데이터 고유의 인덱스로 접근하게 되므로 평균적인 시간복잡도가 O(1)이 됩니다. Hash Function '특별한 알고리즘'을 hash method 또는 해시 함수(hash function)라고 하고 이 메소드에 의해 반환된 데이터의 고유 숫자 값을 hashcode라고 합니다. 동일한 key 값에 복수 개의 데이터가 하나의 테이블에 존재(해시(Hash)값이 충돌하는 경우)할 수 있게 되는 것인데 이를 Collision 이라고 합니다. 이를 해결해주기 위한 방법으로는 분리 연결법(Separate Chaining) Separate Chaining이란 동일한 버킷의 데이..

아키텍쳐란

소프트웨어 아키텍처란 소프트웨어의 전체적인 구조를 잡아주는 설계도입니다. 아키텍처는 소프트웨어의 큰 그림을 보게 해줍니다. 좋은 아키텓처는 사람이 세부적인 코드를 일일이 다 보지 않아도 일관된 코드 구조로 흐름을 쉽게 유추할 수 있도록 합니다. 또한 개발을 하다 보면 코드를 어떻게 분리하고 모듈화할지, 객체를 어떻게 설계할지 고민하곤 하는데 아키텍처는 이러한 고민에 방향을 제시해주는 일종의 지침이라고도 볼 수 있습니다. 몇몇 유명한 아키텍처들은 자주 사용되며 패턴화되기도 하는데, 한 번쯤 들어봤을 만한 레이어드 아키텍처, MVC 패턴 등이 바로 이렇게 패턴화된 아키텍처입니다. 아키텍처가 없다면 아키텍처가 없는 프로젝트들은 다음과 같은 문제점이 있습니다. 본인이 작성한 코드나 모듈을 프로젝트 어디에 두어야..

아키텍쳐 2022.06.03

알고리즘 이론 깨부수기 그래프

Graph Undirected Graph 방향성이 없는 그래프를 Undirected Graph Directed Graph (Digraph) 간선에 방향성이 포함되어 있는 그래프를 Directed Graph Degree Undirected Graph 에서 각 정점(Vertex)에 연결된 Edge 의 개수를 Degree 라 한다. Directed Graph 에서는 간선에 방향성이 존재하기 때문에 Degree 가 두 개로 나뉘게 된다. 각 정점으로부터 나가는 간선의 개수를 Outdegree 라 하고, 들어오는 간선의 개수를 Indegree 라 한다. 가중치 그래프(Weight Graph)와 부분 그래프(Sub Graph) 가중치 그래프란 간선에 가중치 정보를 두어서 구성한 그래프를 말한다. 비가중치 그래프 즉..

[leetCode] 695. Max Area of Island

https://leetcode.com/problems/max-area-of-island/submissions/ Max Area of Island - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 이중 배열을 돌면서 flood를 통하여 가장 넓은 영역의 섬의 면적을 리턴하는 문제이다. 이중 배열을 돌면서 그 값이 1인 경우 탐색을 시작한다. var maxAreaOfIsland = function(grid) { let maxArea = 0 const M = grid..

코테 2022.06.02

알고리즘 이론 깨부수기 Binary Tree, Binary Search Tree,

Binary Tree (이진 트리) 루트 노드를 중심으로 두 개의 서브 트리로 나눠진다. 또한 나눠진 두 서브 크리도 모두 이진 트리여야한다. 트리에서는 각 층별로 숫자를 매겨 이를 트리의 level이라고 한다. 레벨의 값은 0부터 시작하고 따라서 루트 노드의 레벨은 0이다. 그리고 트리의 최고 레벨을 가리켜 해당 트리의 height라고 한다. Perfect Binary Tree (포화 이진 트리) 모든 레벨이 꽉 차있고 각 레벨이 허용하는 최대 자식 노드 개수를 가지고 있는 트리를 말합니다. Complete Binary Tree (완전 이진 트리) 부모, 왼쪽 자식, 오른쪽 자식 순으로, 꽉 채워지며 만들어지는 이진 트리 또는, 포화 이진 트리의 맨아래 단말 노드들을 오른쪽부터 하나씩 제거하여 얻어지는..

알고리즘 이론 깨부수기 Array, Linked List, Stack, Queue, Tree

Array 가장 기본적인 자료구조로 논리적 저장 순서와 물리적 저장 순서가 일치한다. 따라서 인덱스로 해당 언소에 접근할 수 있어 찾고자하는 인덱스 값을 알고 있다면 O(1)의 시간 복잡도를 갖는다. 하지만 삭제하는 과정에서 원하는 값을 삭제하면 빈 공간이 생기고 그 빈 공간을 없애기 위해 뒤에 있는 값들을 당겨와야하기 때문에 O(N)의 시간복잡도를 갖는다. 삽입의 경우도 마찬가지이다. 만약 첫번째 자리에 새로운 원소를 추가하고자 한다면 모든 원소들의 인덱스를 1 씩 shift 해줘야 하므로 이 경우도 O(n)의 시간을 요구하게 된다. Linked List 배열의 문제점을 해결하기 위한 자료구조가 linked list이다. 링크드 리스트는 삽입과 삭제시 O(1)의 시간 복잡도를 가지게된다. 추가 0과 2..

프로토타입

최신 자바스크립트의 경우에서는 클래스를 이용한 객체지향이 가능합니다만 정확히는 자바나 다른 클래스기반의 언어와 다르게 프로토타입으로 class를 흉내낸 것입니다. 프로토타입에 대해서 공부해보는 것이 좋습니다. const obj1 = {} const obj2 = {} obj1.__proto__ === obj2.__proto__ // true 모든 자바스크립트 객체들은 개별적인 오브젝트 프로토 타입을 상속하는 것이 아닌 동일한 오브젝트 타입을 상속합니다. 배열은 array라는 프로토타입을 상속하고 array도 객체이기 때문에 프로토 타입을 상속합니다. 프로퍼티 디스크립터 const dog = { name: '와우', emoji: '🐶' }; console.log(Object.keys(dog)); // ['n..