본문 바로가기

JavaScript

(37)
[JavsScript] 함수의 합성과 데이터 파이프라인 2: pipe - 재사용 가능한 함수 파이프라인 만들기 https://daunje0.tistory.com/173 [JavsScript] 함수의 합성과 데이터 파이프 라인 1. go함수를 값으로 다룰 수 있다는 자바스크립트의 특성 ( 일급함수 ) 때문에정말 다채로운 표현이 가능한 데, 그걸 배우는 데에는 아래 강의가 개인적으로 최고이지 않을까 싶습니다. 참고 : 함수daunje0.tistory.com위 블로그에서 계속 됩니다. go 함수는 즉시 실행되어 값을 리턴하는 함수였지만지금 다룰 pipe 함수는 여러 개의 함수를 인자로 받아 새로운 함수를 반환합니다. 생성된 함수는 인자로 받은 함수들을 순차적으로 실행합니다.  const go = (...args) => args.reduce((a, f) => f(a)); const pipe = (...fs) => (..
[JavsScript] 함수의 합성과 데이터 파이프 라인 1. go - 즉시 실행되는 함수 체인 만들기 함수를 값으로 다룰 수 있다는 자바스크립트의 특성 ( 일급함수 ) 때문에정말 다채로운 표현이 가능한 데, 그걸 배우는 데에는 아래 강의가 개인적으로 최고이지 않을까 싶습니다. 참고 : 함수형 프로그래밍과 JavaScript ES6+ 유인동 님https://www.inflearn.com/course/functional-es6 함수형 프로그래밍과 JavaScript ES6+ 강의 | 유인동 - 인프런유인동 | ES6+와 함수형 프로그래밍을 배울 수 있는 강의입니다. 이 강좌에서는 ES6+의 이터러블/이터레이터/제너레이터 프로토콜을 상세히 다루고 응용합니다. 이터러블을 기반으로한 함수형 프www.inflearn.com   const go = (...args) => args.reduce((a, f) => f(..
[Algorithm] 알고리즘의 공간 복잡도(Space Complexity)란? 1. 정의공간 복잡도는 알고리즘이 실행되는 동안 사용하는 메모리의 양을 나타냅니다. 전체 공간 복잡도 = 입력 공간 + 보조 공간 으로 나뉘지만 알고리즘 자체의 공간 복잡도에 집중해야 보조 공간 (auxiliary space complexity) 메모리 효율성 평가에 유용하며 입력 크기와 무관한 추가 메모리 사용을 명확히 파악 가능하므로여기서는 입력 되는 크기는 제외하고 알고리즘 자체가 얼마나 많은 추가 메모리가 필요한지를 측정합니다. 2. 표기법보통 빅오(Big O) 표기법을 사용합니다. 예: O(n), O(1), O(n^2) 등3. 종류고정 공간: 입력 크기와 무관한 상수 공간 가변 공간: 입력 크기에 따라 변하는 공간 4. 예시 4-1. O(1) 공간 복잡도 예시function findMax(arr..
[JavsScript] yield* 란? yield*는 하나의 표현식입니다. 여기서 *는 yield와 함께 특별한 의미를 가집니다.ECMAScript 명세에 따르면, yield*는 "YieldExpression"의 한 형태로 정의됩니다. yield*는 뒤에 오는 제너레이터나 이터러블 의 각 값을 현재 제너레이터의 yield 지점으로 전달합니다.이는 마치 해당 제너레이터나 이터러블의 모든 값을 현재 제너레이터 내에서 개별적으로 yield하는 것과 같은 효과를 냅니다.1. ECMAScript 2015 언어 명세 (ECMA-262, 6th Edition):https://www.ecma-international.org/ecma-262/6.0/#sec-generator-function-definitions2.MDN Web Docs의 yield 문서:ht..
[Javascript] Iterable, Iterator 프로토콜 자바스크립트의 이터러블(Iterable)과 이터레이터(Iterator) 프로토콜은 객체의 순회 가능성을 정의하는 중요한 개념으로 ES6에 와서for of 문으로 간단히 map set string 도 순회가 가능하도록 만들어준 개념입니다.map set 은 배열처럼 set[0], set[1] 혹은 map[0], map[1] 으로 값을 접근 못하지만 for of 문을 돌 수 있는 이유가  이터러블 이터레이터 프로토콜 때문입니다.  아래의 커스텀 이터레이터 코드를 보면서 정의를 보면 이해가기가 조금 더 쉬워집니다. const iterable = { [Symbol.iterator](){ let i = 3; return { next(){ return i === ..
[프로그래머스] Lv1) 소수 찾기 ( 에라토스테네스의 체, 소수 찾기 ) 1 부터 n 까지의 수 중에서 소수의 개수를 반환하는 문제 입니다이전  Lv1) 기사단원의 무기 문제에서 사용한 에라토스테네스의 체를 다시 이용하면 됩니다. function solution(n) {// idx 자체를 값으로 사용하기 위해 let isPrime = new Array(n + 1).fill(true); isPrime[0] = isPrime[1] = false;// 제곱근 까지만 계산 for (let i = 2; i * i e === true).length;} 제곱근 까지만 계산하는 이유는 아래 링크에 설명 되어있습니다.https://daunje0.tistory.com/135 limit ? power : e).reduce((a,b) => a+b);}이 코드는 시간복잡도가 O..
[프로그래머스] Lv1) 기사단원의 무기 ( 에라토스테네스의 체, 소수 , 약수 찾기 ) 이 문제는 약수 찾기의 문제입니다function solution(number, limit, power) { let arr = [] let count = 0 for(let i = 1; i e > limit ? power : e).reduce((a,b) => a+b);}이 코드는 시간복잡도가 O(n^2)이기에 시간초과로 fail 이 된 경우 입니다.시간 복잡도를 줄이기 위해서는 에라토스테네스의 체를 이용해야한는 것을 검색을 통해 힌트를 얻었습니다. https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4 에라토스테네스의 체 - 위키백과, 우리 모두..
두 수의 최대 공약수, 최소 공배수 구하기 (유클리드 호제법, 자바스크립트) 코테 준비를 하다보면 두 수의 최대 공약수를 구해야 하는 경우가 보인다.  a = 100, b = 30 두수가 있을 때,  a = b * x + y 에서 기존 b 에 a 를 넣고  b 자리에는 y를 넣어 반복 하고y가 0일 때의 b값이 최대 공약수가 된다 100 = 30 * 3 + 10 =>  a 에 30 b 에 나머지 10치환30 = 10 * 3 + 0 =>  나머지 0 이므로 10이 최대공약수 가 된다. 코드화하면const GCD = (a, b) => { if (b === 0) return a; return GCD(b, a % b); };위 처럼 재귀함수화 하여 파라미터의 a 자리에  b를 대입하고, b 자리에는 나머지를 넣어주면 된다. 그럼 최소공배수를 구하는 법은?  두 수 a와 b의 ..