개인공부/TIL(Today I Learned) 95

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,..

TIL 41일차_상속과 프로토타입

ES6부터 class키워드를 지원하기 시작했으나, 문법적인 양념일뿐이며 자바스크립트는 여전히 프로토타입 기반의 언어이다. 상속 관점에서 자바스크립트의 유일한 생성자는 객체뿐이다. 각각의 객체는 [[Prototype]]이라는 은닉(private) 속성을 가지는데 자신의 프로토타입이 되는 다른 객체를 가리킨다. 그 객체의 프로토타입 또한 프로토타입을 가지고 있고 이것이 반복되다, 결국 null을 프로토타입으로 가지는 오브젝트에서 끝난다. null은 더 이상의 프로토타입이 없다고 정의되며, 프로토타입 체인의 종점 역할을 한다. 속성 상속 자바스크립트 객체는 속성을 저장하는 동적인 "가방"과 (자기만의 속성이라고 부른다) 프로토타입 객체에 대한 링크를 가진다. 객체의 어떤 속성에 접근하려할 때 그 객체 자체 속..