-
[JS/Prototype] Javascript Prototype Chain에 대하여Frontend 2019. 7. 24. 16:42
뭔가 모호하게 이해했었는데 다시 확실하게 개념을 정리하려고 쓰는 글이다! -아래 예제는 바닐라코딩(Vanilla Coding) 수업 시간에 쓰인 예제 코드 중 일부입니다.- function Car (owner) { this.owner = owner; } Car.prototype.soldTo = function (newOwner) { this.owner = newOwner; }; 여기 자동차를 만드는 Car라는 이름의 constructor 함수가 있다. 이 생성자 함수에는 owner라는 인자를 받아서 할당한 owner 속성을 가지고 있다. Car의 prototype에는 soldTo라는 메소드가 존재한다. function ElectricCar (owner) { Car.call(this, owner); thi..
-
[알고리즘/자바스크립트] 트리에서 잎노드 개수 구하기 (Tree Count Leaves)Algorithm 2019. 7. 23. 11:11
Tree Count Leaves Implement a `countLeaves` in this basic binary Tree class. A leaf node is any node in the tree that has no children. `countLeaves` should traverse the tree, and return the number of leaf nodes the tree contains. Illustration of a tree with three leaves: Example usage: var root = new Tree(); root.countLeaves(); // 1 root.addChild(new Tree()); root.countLeaves(); // still 1 root...
-
[JS/OOP] 자바스크립트와 객체지향 프로그래밍(Object Oriented Programming) / 캡슐화(Encapsulation), 추상화(Abstraction), 상속(Inheritance) 개념 정리Frontend 2019. 7. 21. 16:23
객체지향 프로그래밍(Object Oriented Programming) 객체지향 프로그래밍이란 어떤 동작이나 로직보다는 객체를 중심으로 프로그래밍을 하는 일종의 새로운 패러다임이다. 여기서 객체란 우리가 모델링하고자 하는 대상과 관련된 모든 정보와 데이터, 코드, 동작, 기능들을 담을 수 있다. 그러니까 객체지향 프로그래밍이란 간단하게 말해서 우리가 어떤 프로그램을 새로 만들려고 할 때 어떤 방식으로 프로그램을 구성하고 조립할 것인지에 대한 이론적인 개념이다. 어떤 식으로 프로그램을 만드느냐는 순전히 개발자의 창의력과 아이디어에 달려있다. 그러니까 우리가 객체지향 프로그래밍에서 주로 사용되는 프로토타입이나 클래스 등이 어떤 식으로 기능하는지는 공부할 수 있지만 객체지향 프로그래밍 자체를 어떻게 하는지는 ..
-
[JS/Sorting] 퀵 정렬, 자바스크립트로 구현하기 (Quick Sort in JavaScript)Frontend 2019. 7. 21. 13:24
Quick Sort 퀵 정렬은 1960년에 찰스 앤터니 리처드 호어(C.A.R hoare)가 처음 제안한 방법으로 이후 많은 사람들이 수정 보완하여 완성된 정렬 알고리즘이다. 이 알고리즘은 처음 소개된 이후로 반세기가 넘었지만 현존하는 가장 빠른 정렬 알고리즘 중에 하나이다. 퀵 정렬은 in place 방법과 in place가 아닌 방법 2가지가 있는데 실제로 많이 쓰이는 방법은 메모리 사용량이 적은 in place 방법이다. 그러나 in place가 아닌 방법이 더 직관적으로 이해하기 쉬우므로 이 방법을 먼저 정리하고 그 다음 in place 방법을 정리하겠다. Basic Quick Sort - Not In Place 퀵 정렬은 지난번 병합 정렬 포스팅에서 소개한 Divide and Conquer 전략..
-
[JS/Sorting] 병합 정렬(Merge Sort)과 분할 정복 전략(Divide and Conquer) 개념에 대하여Frontend 2019. 7. 21. 11:49
Merge Sort 병합 정렬 혹은 합병 정렬이라고 불리는 Merge Sort는 데이터들을 잘게 쪼갠 다음에 하나로 합치는 과정에서 정렬하는 방법이다. 요즘은 데이터를 USB같은 장치로 저장하는 것이 일반적이었으나 아주 옛날에는 테이프를 이용해서 저장했다. 테이프 드라이브에 저장된 데이터를 정렬하는 일은 매우 어려운 일이었다. 왜냐면 테이프 드라이브는 항상 데이터를 처음부터 순차적으로 읽어야 한다는 특징이 있기 때문이다. 이러한 테이프 드라이브의 문제점 때문에 병합 정렬 알고리즘이 탄생하였다. 병합 정렬은 위의 그림처럼 데이터를 절반씩 쪼개는 divide 작업을 먼저 하는데 이 작업은 데이터가 하나만 남을 때까지 반복한다. 그 후에 하나씩 쪼개진 데이터를 정렬을 하면서 다시 그룹화한다. 이런 과정은 아래..
-
[JS/Sorting] 버블 정렬, 삽입 정렬, 선택 정렬 자바스크립트로 구현하기 (Bubble Sort, Insertion Sort, Selection Sort in JavaScript)Frontend 2019. 7. 20. 23:47
Sorting Algorithm 무작위로 섞여있는 데이터를 어떤 기준에 맞춰 정렬하는 알고리즘은 여러 가지가 있다. 정렬 알고리즘은 다양한 경우에 매우 유용하게 사용된다. 각종 데이터 목록을 정리하고 싶을 때 분포도의 중위값을 알아내고 싶을 때 데이터에서 중복값을 잡아내고 싶을 때 이진 탐색을 하고 싶을 때 사실 내가 공부하는 자바스크립트에 sort()라는 메소드가 이미 존재하듯이, 모든 프로그래밍 언어에는 자체적인 정렬 메소드가 있다. 그럼에도 불구하고 우리가 정렬 알고리즘을 배워야하는 이유는 시스템 정렬이 항상 좋은 퍼포먼스를 보장하지 않기 때문이다. 또한 내가 가진 데이터베이스의 양이나 상황에 따라 어떤 정렬을 사용하는 것이 좋을지 달라지기 때문에 우리는 기본적으로 유명한 정렬 알고리즘들은 반드시 ..
-
[알고리즘/자바스크립트] 뒤집어진 연결 리스트 (Reverse Linked List)Algorithm 2019. 7. 18. 11:08
Reverse Linked List Write a function that reverses the order of a singly-linked list in place. So a list like this: A -> B -> C -> null Should be transformed into a list like this: C -> B -> A -> null Example) var root = Node('A'); var nodeB = root.next = Node('B'); var nodeC = nodeB.next = Node('C'); // The list looks like this: A -> B -> C -> null var newRoot = reverseLinkedList(root); // The ..
-
[알고리즘/자바스크립트] 아나그램 판별하기 (is Anagram)Algorithm 2019. 7. 16. 12:07
문제: Modify the String prototype to add a new method `isAnagram`. `isAnagram` takes a single string argument. It returns true if that string is an anagram of the string it was called on, and false otherwise. Example: isAnagram("roasting", "organist"); // true isAnagram("presence", "presents"); // false Anagrams should ignore spaces, punctuation, and capitalization: isAnagram("Quid est veritas?", ..
-
[알고리즘/자바스크립트] 베스트앨범 / 프로그래머스 - 해시 Level 3Algorithm 2019. 7. 14. 21:44
해시 - Level 3 문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. 제한사항 genres[i]는 고유번호가 i인 노래의 장르입니다. plays[i]는 고유번호가 i인..
-
[자료 구조] Data Structure - (3) Tree / Binary Search TreeComputer Science 2019. 7. 14. 13:45
Tree 트리(Tree)는 이름 그대로 나무를 거꾸로 뒤집어 놓은듯한 형태이다. 자료구조가 하나의 뿌리에서 뻗어나가는 형상을 하고 있다. 트리 구조는 우리 일상에서 흔히 볼 수 있는 계층적인 구조(Hierarchical Structure)를 컴퓨터에서 표현한 구조이다. 한 가족의 족보나 회사의 조직도 등이 바로 트리 구조이다. 족보같은 경우 조상으로부터 자식, 자식의 자식, 자식의 자식의 자식 형태로 이루어져있기 때문이다. 컴퓨터의 파일 시스템이나 웹 페이지의 DOM 구조도 트리 구조이다. 트리 구조는 대개 위 그림과 같은 구조이다. 트리의 각 요소들은 Node라고 부르고 가장 상위의 노드를 Root Node라고 부른다. 반대로 최하위 노드는 Leaf Node 혹은 Terminal Node라고 한다. L..