Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p = 1, does his multiplication, then Ollie multiplies the number, then Stan and so on. Before a game starts, they draw an integer 1 < n < 4294967295 and the winner is who first reaches p ≥ n. Stan과 Ollie가 정수 p 에 2 이상 9이하의 수 가운데 하나를 곱하는 곱하기 게임을 한다. 항상 가장 먼저 게임을 시작하는 것은 ..
힙 정렬에서는 최소 힙(Min Heap)과 최대 힙(Max Heap) 두 가지 유형의 힙을 사용할 수 있습니다. 다음으로 각각의 힙에 대해 설명해드리겠습니다: 최소 힙(Min Heap): 최소 힙은 부모 노드가 자식 노드보다 작거나 같은 값을 갖는 이진 트리입니다. 이 힙에서는 가장 작은 값이 루트 노드에 위치합니다. 최소 힙을 사용하면 힙에서 가장 작은 값에 빠르게 접근할 수 있습니다. 최대 힙(Max Heap): 최대 힙은 부모 노드가 자식 노드보다 크거나 같은 값을 갖는 이진 트리입니다. 이 힙에서는 가장 큰 값이 루트 노드에 위치합니다. 최대 힙을 사용하면 힙에서 가장 큰 값에 빠르게 접근할 수 있습니다. 힙 정렬에서는 일반적으로 최대 힙을 사용하여 정렬을 수행합니다. 정렬할 배열을 최대 힙으로 ..
퀵 정렬(Quick Sort)은 분할 정복(divide and conquer) 방식을 사용하여 배열을 정렬하는 알고리즘입니다. 주어진 배열을 기준값(pivot)을 기준으로 작은 값은 왼쪽으로, 큰 값은 오른쪽으로 분할하고, 분할된 부분 배열에 대해 재귀적으로 정렬을 수행합니다. 그림으로 설명을 드리겠습니다. 그림1 : 정렬하고자 하는 배열을 맨 오른쪽 끝을 기준으로 잡아서 새로 생성한 배열 2개(좌, 우)에 기준으로 잡은 배열값(맨 마지막 열 값 10부터)보다 작으면 좌측 배열에 넣고, 크면 우측 배열에 넣습니다. 이 부분을 각 좌측 배열과, 우측 배열을 재귀함수를 이용하여 다시 좌우측으로 정렬하는 작업을 반복합니다. 그림2 : 더이상 좌, 우측 배열로 나눌 데이터가 없는 경우 회귀를 통해서 각 재귀함수..
삽입 정렬(Insertion Sort)은 간단한 정렬 알고리즘 중 하나로, 배열을 정렬된 부분과 정렬되지 않은 부분으로 나누고, 정렬되지 않은 부분의 요소를 정렬된 부분에 적절한 위치에 삽입하는 방식으로 동작합니다. 아래는 JavaScript로 구현된 삽입 정렬 알고리즘의 예시입니다 function insertionSort(arr) { const n = arr.length; for (let i = 1; i = 0 && arr[j] > current) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = current; } return arr; } // 사용 예시 const ar..
실행 컨텍스트(Execution Context)는 JavaScript 코드가 실행되는 환경을 나타내는 개념입니다. JavaScript 엔진은 코드를 실행할 때 실행 컨텍스트를 생성하고 관리합니다. 각 실행 컨텍스트는 해당 코드의 실행에 필요한 정보를 포함하고 있으며, 스코프 체인, 변수, 함수 등의 정보를 저장합니다. 실행 컨텍스트는 다음과 같은 요소로 구성됩니다: 변수 객체(Variable Object): 현재 컨텍스트에서 선언된 변수, 함수 선언, 매개변수 등을 포함하는 객체입니다. 전역 컨텍스트의 경우 전역 객체(Global Object)가 변수 객체로 사용됩니다. 스코프 체인(Scope Chain): 변수 객체와 상위 스코프의 변수 객체들을 연결한 체인입니다. 스코프 체인은 변수 및 함수를 검색하..
JavaScript Web Worker는 웹 애플리케이션에서 백그라운드 스레드에서 동작하는 스크립트 작업을 처리하기 위한 기술입니다. 이를 통해 병렬 처리를 통한 성능 향상과 웹 애플리케이션의 반응성 향상을 달성할 수 있습니다. Web Worker는 브라우저의 주 스레드와 독립적으로 실행되는 백그라운드 스레드입니다. 이 스레드는 웹 애플리케이션과는 별도로 실행되므로 메인 스레드의 작업과는 분리되어 있습니다. 이로 인해 Web Worker는 CPU 집약적인 작업이나 긴 시간이 걸리는 작업을 처리하는 데 적합합니다. Web Worker를 사용하기 위해서는 다음과 같은 단계를 따릅니다: 워커 스크립트 파일 생성: 웹 워커로 실행할 JavaScript 코드를 포함하는 별도의 스크립트 파일을 생성합니다. 워커 객..
Object.keys(obj): 객체의 열거 가능한 속성 이름을 배열로 반환합니다. const obj = { name: 'John', age: 30, city: 'New York' }; const keys = Object.keys(obj); console.log(keys); // ['name', 'age', 'city'] Object.values(obj): 객체의 열거 가능한 속성 값들을 배열로 반환합니다. const obj = { name: 'John', age: 30, city: 'New York' }; const values = Object.values(obj); console.log(values); // ['John', 30, 'New York'] Object.entries(obj): 객체의 열거..
Math.abs(x): 숫자 x의 절댓값을 반환합니다. const num = -5; const absNum = Math.abs(num); console.log(absNum); // Output: 5 Math.ceil(x): 숫자 x보다 크거나 같은 가장 작은 정수를 반환합니다. const num = 4.3; const ceilNum = Math.ceil(num); console.log(ceilNum); // Output: 5 Math.floor(x): 숫자 x보다 작거나 같은 가장 큰 정수를 반환합니다. const num = 4.7; const floorNum = Math.floor(num); console.log(floorNum); // Output: 4 Math.round(x): 숫자 x를 반올림한 ..
push(): 배열의 끝에 하나 이상의 요소를 추가합니다. const fruits = ['apple', 'banana']; fruits.push('orange'); console.log(fruits); // ['apple', 'banana', 'orange'] fruits.push('grape', 'mango'); console.log(fruits); // ['apple', 'banana', 'orange', 'grape', 'mango'] pop(): 배열의 마지막 요소를 제거하고 반환합니다. const fruits = ['apple', 'banana', 'orange']; const lastFruit = fruits.pop(); console.log(lastFruit); // 'orange' cons..
문제 : 2나 5로 나눌 수 없는 0 이상 10,000 이하의 정수 n이 주어졌는데, n의 배수 중에는 10진수로 표기 했을때 모든 자리수가 1인 것이 있다. 그러한 n의 배수중에서 가장 작은 것은 몇자리 수 일까? let integerArray = new Array(10000).fill(0) integerArray = integerArray.reduce((ac, e, i, array) => { if (i%2 != 0 && i%5 != 0) { ac.push(i); } return ac }, []).filter(e => e != 1); integerArray.forEach(function (e) { calculator(e); }) function calculator(e) { let result = [];..