본문 바로가기

전체 글

(73)
자바스크립트 - 이벤트 루프 이벤트 루프(Event Loop)는 함수의 호출 구조를 조금 더 자세하게 볼 수 있습니다. 이벤트 루프의 테스크 큐는 어떠한 이벤트를 기다렸다가 실행되는 방법이라 볼 수 있습니다. 호출 스택에 들어왔을 때 바로 실행되는 것이 아닌 테스크 큐를 한번 거쳐 실행되는 방식입니다. function run(){ console.log("HEllo world"); } console.log("camel"); setTimeout(run, 2000); console.log("source"); setTimeout은 전역 객체 window내에 있는 함수로 두번째 인자만큼의 시간이 흐른 뒤에 첫번째 인자를 실행하는 함수입니다. 코드의 실행 결과 입니다. 결과 camel source HEllo world run 코드 이전에 so..
자바스크립트 - 콜 스택 콜 스택(call stack)이란 실행이 되었을 때 호출이 되는 것들이 메모리에 적재되고 마치 스택과 같은 구조로 적재되는 것입니다. 실행 컨텍스트라고도 하는 이것은 자바스크립트의 동작원리 라고 볼 수 있습니다. 함수선언이 다음과 같이 되어있다고 가정합니다 function first(){ second(); console.log("first"); } function second(){ third(); console.log("second"); } function third(){ console.log("third"); } first(); 실행이 되면 다음과같이 아래서부터 호출스택이 쌓이게 됩니다. third second first main 메인에서부터 third까지 호출되는 순서대로 하나씩 쌓이고 실행이 될때는..
자바스크립트 - 호이스팅 자바스크립트는 실행이 되기 전 코드 전체를 한번 parsing 하고 코드 내 정의되어있는 함수나 변수들을 기억해놓은다. var v1 = "Hello"; console.log(v1); var v2 = "World"; console.log(v2); 이와 같은 코드를 실행할 때 자바 스크립트는 변수 선언 부를 한번 확인하고 끌어올린다라고 생각하면 된다. 위의 코드를 호이스팅에서 다음 처럼 된다고 생각하면 된다. var v1; var v2; v1 = "Hello"; console.log(v1); v2 = "World"; console.log(v2); {}블럭 내에서 유효하며 변수 뿐만아니라 함수선언문도 같다고 생각하면 된다. run() function run(){ return "Hello World"; } 위와..
자바스크립트 - 함수 선언 자바스크립트는 다른 프로그래밍 언어와 마찬가지로 함수를 지원한다. 간단하게 덧셈함수를 구현해본다. function sum(a, b){ return a + b; } 함수 인자에 데이터 타입이 정의가 되어있지 않은 것을 볼 수 있다. 자바스크립트 변수는 값을 받았을 때 이 값의 데이터 타입을 확인하고 변수의 타입이 정해진다. 때문에 인자 데이터 타입을 미리 정의해두지 않아도 된다. 함수를 사용할 때는 인자에 값을 넣어 호출하면 된다. sum(1,2); 결과 3ES6는 화살표함수라는 특이한 모양의 문법을 지원하는데 표기법이 다르지 다른 함수와 크게 다르지 않다고 생각한다. 위의 함수와 같은 결과를 가지는 화살표함수이다. var sum = (a, b) => a + b; sum(3,5); 결과 8함수 이름을 선언..
[C++] 머지 소트(Merge Sort) 구현 크기를 절반씩 나누어 가장 작은 크기부터 정렬을 한 다음 정렬한 배열을 합쳐 다시 정렬하는 분할정복 방식의 알고리즘입니다. 그림과 같은 방식으로 정렬이 이루어 집니다. using namespace std; template class algorithm{ private: void swap(T& a, T& b){ T tmp = a; a = b; b = tmp; } void sort(T* array_list, int left, int mid, int right){ T sorted[right - left]; int low = left; int high = mid; int index = 0; while(low array_list[hig..
[C++] 퀵 소트(Quick Sort) 구현 정렬 알고리즘 중 빠른 속도를 자랑하는 퀵소트 알고리즘 정렬을 하는 알고리즘을 구현했습니다. #include template class QuickSort{ private: int sort(T* array_list, int left, int right){ int pivot = left; int low = left + 1; int high = right; while(low = array_list[pivot]) high--; if(low > high){ this->swap(array_list[pivot], array_list[high]); } else{ this->swap(array_list[low], array_list[high]); } } return high; }; void swap(T& a, T& b)..
[C++] 계산기 구현 보호되어 있는 글입니다.
최대공약수(gcd), 최소공배수(lcm) 알고리즘 문제를 풀다보면 가끔 최대공약수, 최소공배수를 구하라는 문제가 나온다. 자주 있는 문제 유형이 아니다보니 항상 문제를 풀때마다 구하는 방법을 찾는 것 같아서 정리할 필요가 있어서 작성한다. 유클리드 공식이라고 하여 최대공약수에는 다음과 같은 성질이 있다. 0과 n의 최대공약수는 n이다 a와 b의 최대공약수는 b와 a를 b로 나눈 나머지의 최대공약수와 같다 위와 같은 성질이 있다고 한다. 이 공식을 토대로 코드를 작성하면 다음과 같다 int gcd(int a, int b){ // 큰 숫자를 a에 둔다 if(a < b){ int t = a; a = b; b = t; } while(b!=0){ int n = a % b; a = b; b = n; } return a; } 작은 수가 0이 될때까지 반복을..