1. 동기 vs. 비동기 동기 (Synchronous) 동기적인 작업은 순서대로 실행된다. 즉, 한 작업이 시작되면 다음 작업은 이전 작업이 완료될 때까지 기다린다. 코드가 순차적으로 실해되기 때문에 결과를 예측하기 쉬우며, 간단한 디버깅이 가능하다. But, 작업이 끝날 때까지 기다려야 하므로, 대규모 작업이나 시간이 오래 걸리는 작업의 경우 성능에 영향을 줄 수 있다. 대표적으로 JavaScript가 동기적으로 작동하는 언어다. 비동기 (Asynchronous) 순서와 관계없이 독립적으로 실행된다. 즉, 한 작업의 완료를 기다리지 않고 다음 작업을 실행할 수 있다. 비동기 작업은 주로 콜백(Callback), 프로미스(Promise), 혹은 비동기 함수(async / await)를 통해 처리된다. 이..
1. JavaScript 엔진 인터프리터란? 프로그래밍 언어의 코드를 실행하는 컴퓨터 프로그램 또는 환경 자바스크립트를 실행하기 위해서는 자바스크립트 엔진이 필요하다. 대표적으로 Google의 V8 엔진, Firefox의 SpiderMonkey, Safari의 Webkit이 있다. JavaScript 엔진의 주요 구성요소 메모리 힙(Memory Heap): 동적으로 할당 된 메모리를 저장하는 곳 객체, 배열, 함수 등의 데이터 구조와 변수가 저장되는 공간 메모리 관리는 대부분 Garbage Collection에 의해 이루어진다. 더 이상 사용되지 않는 메모리를 자동으로 탐지하여 해제한다. 웹 페이지의 각 탭마다 별도의 메모리 힙이 할당되며, 각 힙은 해당 탭에서 실행되는 자바스크립트 코드와 관련되 모든 ..
1. 백트래킹이란? 일반적으로 그래프/트리의 모든 원소를 완전 탐색하기 위한 목적으로 사용 재귀 함수를 이용해 구현, 단순히 완전 탐색하는 것이 아니라 조건에 따라 유망한 노드로 이동 백트래킹을 진행할 때, 경우의 수를 최대한 줄이는 방법 : 이전까지 경우와 상충되지 않는 조건을 만족하는 위치에 대해서만 재귀 함수를 호출 재귀 함수를 통해 모든 경우의 수를 다 찾은 뒤에, 각 경우마다 가능한지 검사하는 방법 유망한 경우에 대해서만 재귀 함수를 호출하는 방법 ==> 2번 방법이 더 효율적이다. N-queen let n = 8; let queens = []; function possible(x, y) { for (let [a, b] of queens) {// 현재까지 놓았던 위치를 하나씩 확인 if (a =..
순차 탐색 vs. 이진 탐색 예) 값이 12인 원소의 위치를 찾기 > 순차 탐색: 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 하나씩 확인 ==> 탐색을 위한 시간 복잡도: O(N) > 이진 탐색: 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색 ==> 탐색을 위한 시간 복잡도: O(logN) 이진 탐색(Binary Search) 동작 방식 시작점(left) 와 끝점(end)을 기준으로 탐색 범위를 명시 이진 탐색의 시간 복잡도 각 단계마다 탐색 범위를 2로 나누는 것으로 이해할 수 있다. 이상적인 경우 매 단계마다 범위가 반으로 감소하므로, 로그(log) 복잡도를 가진다. 대표적인 예시 매우 넓은(억 단위 이상) 탐색 범위에서 최적의 해를 찾아야 하는 경우 데이터를 정렬한..
1. 탐욕 알고리즘(Greedy Algorithm) 현재 상황에서 가장 좋아 보이는 상황만을 선택하는 알고리즘 최적의 해를 구하기 위한 근사적인 방법으로 사용 단순한 탐욕 알고리즘으로는 최정의 해를 놓칠 수 있다. But, 최적의 해에 가까운 답을 찾는 것을 고려하면 다양한 프로그램에서 "근사해"를 구하는 목적으로 사용된다. 접근 방법 방법 고안하기: 현재 상황에서 어떤 것을 선택할지 알고리즘을 고안 정당성 확인하기: 자신이 고안한 알고리즘이 항상 최적의 해를 보장하는지 확인 (증명 단계)
1. 선택 정렬 매 단계에서 가장 작은 원소를 선택해서 앞으로 보내는 정렬 방법 앞으로 보내진 원소는 더 이상 위치가 변경되지 않는다. 시간 복잡도 O(N^2)로 비효율적인 정렬 알고리즘 중 하나 동작 방식 각 단계에서 가장 작은 원소를 선택 현재까지 처리되지 않은 원소들 중 가장 앞의 원소와 위치를 교체한다. // 선택 정렬 함수 function selectionSort(arr) { for (let i = 0; i arr[j] { min Index = j } } // 스와프(swap) let temp = arr[i] arr[i] ..