개인공부 108

TIL 47일차_자료구조: 그래프와 트리

흔히 자료구조 중 스택,큐,그래프,트리 이 4가지가 가장 기본이 되고, 각종 테스트나 입사 면접문제로도 자주 출제된다. 왜냐? 중요하니까! 이들이 중요한 이유는 현실의 대다수, 또는 모든 것을 표현하는 개념이기 때문이다. 오늘은 그래프와 트리에 대해서 알아보자. 그래프와 트리? 그래프 그래프는 개체간의 "관계" 를 다룬다. 현실에서도 수많은 개체가 상호작용하는데 이들이 연결되어 있을 때, 이 개체의 노드를 엣지로 이을 수 있고, 이것이 곧 그래프이다. 트리 트리는 계층을 표현한다. 정점인 루트노드부터 시작해서 말단인 리프노드까지 분기한다. 그래프와 트리 그래프와 트리는 분명 비슷하다. 왜냐하면, 트리의 부모노드와 자식노드의 계층관계도, 결국 그래프에서 말하는 "관계" 라고 할 수 있기 때문이다. 그렇다면..

TIL 46일차_알고리즘문제_잘린 사각형의 개수

프로그래머스 문제중 "멀쩡한 사각형" 문제의 내용이다. 너비가w 높이가h인 사각형을 대각선으로 접었을 때, 잘린 사각형의 개수를 구하면 해결할 수 있는 문제다. 잘린 사각형의 개수 w가 8, h가12인 사각형이 있다. 이때, 직선이 지나는 점의 개수(빨간 사각형의 개수)는 4개이다. 이는 8과 12의 최대공약수이다. 최대공약수가 1일때를 생각해보자. w가 2, h가 3일 때를 한번 살펴보자. 대각선이 점에 도착할때까지, 가로의 개수 + 세로의 개수만큼 사각형이 갈라진다. 다만, 위의그림에서 대각선이 점에서 시작할 때, 잘리는 사각형이 중복되므로 1을 빼줘야한다. 정리하면, 최대공약수가 1일때 잘라지는 사각형의 개수는 w+h-1이다. 그렇다면 최대공약수가 g일때는?? 앞서 말했듯이, 중복되는 사각형은 대각..

TIL 45일차_알고리즘_이진탐색트리

이진탐색트리 단순탐색의 시간복잡도는 O(N), 이진탐색의 시간복잡도는 O(logN)이다. 따라서 N의 크기가 커질수록 이차이는 커진다. 예를들어 40억개를 탐색하면 단순탐색은 40억번을 계산해야하고 이진탐색은 32번만 계산하면된다. 배열에서 특정숫자를 찾는 이진탐색은 다음과같다. function bst(list,item){ let min = 0 let max = list.length-1; while(min

TIL 44일차_setTimeout의 this와 이를 제어하는 bind메소드

this는 this를 사용한 함수가 어떻게 불리느냐(어디에서 호출되느냐)에 따라 가리키는 값이 달라진다. 따라서 원하는 this를 지정해주기 위한 method가 있는데 바로 call, apply, bind 이다. 이중 call과 apply는 this를 지정해줌과 동시에 함수를 호출하며 bind는 호출하지 않는다는 차이점이 있다. 오늘은 bind를 사용하여 비동기함수인 setTimeout의 this를 제어해 보자. 왜 setTimeout의 this는 요상할까?? setTimeout의 this는 조금은 의도와는 다르게 작동한다. strict모드일 때는 undefined가 호출되고, strict모드가 아닐 때는, 전역객체 (window 혹은 global)가 호출된다. 왜일까?? 이건 이벤트루프,스택,큐와 관련..

TIL 43일차_1급시민

객체지향프로그래밍을 배우면서 1급 시민에대해 다시 정리할 필요가 있다고 느껴서, 1급 시민, 1급 객체, 1급 함수, 고차 함수 등에 대해 정리해보려고 한다. 1급시민 프로그래밍 언어에서 1급 시민의 조건은 다음과 같다. 변수에 담을 수 있다. 함수의 인자로 전달할 수 있다. 함수의 반환값(return)으로 전달할 수 있다. 거의 모든 프로그래밍 언어에서 숫자형, 문자형은 1급 시민의 조건을 충족한다. 1급객체 1급객체란, 말 그대로 1급 시민의 조건을 충족하는 객체이다. JavaScript에서 객체는 1급 시민이므로, 1급객체라 할 수 있다. 1급함수 Javascript에서 함수는 객체이며, 따라서 1급 시민에 해당하므로 1급함수라고 할 수 있다. 몇몇 학자들은 1급 함수가 되려면 1급 시민의 조건과 ..

TIL 42일차_상속 방법 두가지: pseudoClassical패턴과 ES6+ class문법

pseudoclassical 상속 방법 상위클래스 Person은 다음과 같다. function Person(first, last, age, gender, interests) { this.name = { first, last }; this.age = age; this.gender = gender; this.interests = interests; }; Person.prototype.greeting = function() { alert('Hi! I\'m ' + this.name.first + '.'); }; 상속받아서 생성자함수 수정하기. function Teacher(first, last, age, gender, interests, subject) { Person.call(this, first, last,..