Currying (커링)
·
⭐FE
📌Currying ( 커링 ) 수학과 컴퓨터 과학에서 커링(Currying)이란 다중 인수를 갖는 함수를 단일 인자를 받는 함수들의 함수열로 변환하는 것을 의미한다. 이해를 돕기위해 3개의 수를 입력받아 다 곱한 결과를 return 하는 3개의 인자를 필요로 하는데 단일인자를 갖는 함수들의 함수열로 표현해 보았다. function multiply(a) { return function (b) { return function (c) { return a * b * c; }; };}const result = multiply(2)(3)(4); // 2 * 3 * 4 =24console.log(result); //24📌커링을 이용해서 가져갈 수 있는 장점..
Callback Function
·
⭐FE
📌CallBack Function ( 콜백함수 ) 간단하게 말하면 콜백함수란 특정함수의 인자로 전달된 함수로 보통 외부함수(Outer Funtion)의 내부에서 실행됩니다.하단 코드에서 doSomething 함수의 인자로 전달된 ()=>{ value=2 } 함수가 콜백함수이다. let value = 1;doSomething(() => { value = 2;});console.log(value);📌주의사항콜백함수로 전달된 함수가 동기적(synchronous)으로 작동하는 비동기적(asynchronous) 으로 작동하는지를 주의해야 한다.작동방식에 따라 아래 코드는 다른결과를 보여준다. let value = 1;doSomething(() => { value = 2;});console.log(val..
LeetCode [JS] > 1004. Max Consecutive Ones III
·
🔒Algorithm
📌문제링크https://leetcode.com/problems/max-consecutive-ones-iii/description/?envType=study-plan-v2&envId=leetcode-75📌문제풀이이 문제는 sliding window로 접근해서 풀면된다. 시간 복잡도는 O(n) 이며 right를 1씩 증가하면서 zeroCnt 가 > k 이면 zeroCnt가 k를 넘지 않을때까지 left를 이동한뒤 right-left+1을 이용하여 1의 갯수를 구할 수 있다. // time complexity O(n)/** * @param {number[]} nums * @param {number} k * @return {number} */var longestOnes = function (nums, k) ..
웹 서비스 캐시 다루기
·
⭐FE
📌배경웹 성능을 높이는 데 있어 HTTP 캐시 전략은 굉장히 중요하다. 캐시를 잘못 설정하면 불필요한 요청이 발생하거나, 반대로 변경된 리소스를 사용하지 못해 사용자 경험을 해치는 일이 발생할 수 있다. 📌캐시의 생명주기 HTTP 캐시 전략에서 핵심은 리소스의 유효 기간을 얼마나, 어떤 조건으로 설정할지를 결정하는 것이다. 대표적인 설정값은 다음과 같다.max-age=: 캐시 유효 시간, 이 시간 동안은 서버에 요청하지 않고 캐시 사용no-cache: 캐시를 저장하지만, 사용할 때마다 서버에 재검증 요청을 보냄no-store: 캐시를 저장하지 않음. 로그인 정보나 민감한 리소스에 적합함로컬에서 간단하게 express 서버로 `./public/script.js` 를 1시간 ( max-age=3600 )..
LeetCode[JS] > 350. Intersection of Two Arrays II
·
🔒Algorithm
문제링크https://leetcode.com/problems/intersection-of-two-arrays-ii/description/문제풀이해시테이블을 이용한 풀이 -> Time complexity O(n)/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */var intersect = function (nums1, nums2) { const map = new Map(); const answer = []; for (const n of nums1) { map.set(n, (map.get(n) || 0) + 1); } for (const n of nums2) { if..
LeetCode[JS] > 1913. Maximum Product Difference Between Two Pairs
·
🔒Algorithm
🧩문제링크https://leetcode.com/problems/maximum-product-difference-between-two-pairs/🔨문제풀이이 문제는 처음에 sort로 정렬해서 1,2번째로 가장 큰수, 1,2번째로 가장 작은 수들을 바로 이용하는 방식으로 풀었는데 시작복잡도를 더 최적화 하는방법이 있었고 그 방법이 아래 방법이다. 단순히 nums의 모든 원소들을 sorting 하는방식은 시간복잡도나 O(nlogn)이고 아래 풀이의 시간복잡도는 O(n)이다.  ( 참고로 js에서 사용하는 sort 함수의 시간복잡도는 O(nlogn)이다. ) /** * second try * time complexity O(nlogn) * @param {number[]} nums * @return {numb..
LeetCode [JS] > 1496. Path Crossing
·
🔒Algorithm
문제링크https://leetcode.com/problems/path-crossing/description/문제풀이이 문제는 Set 객체를 이용하면 쉽게 풀 수 있다. Set 객체는 얼핏 보면 Array형태라고 생각될 수 도 있는데 HashTable 형태를 띄고 있기에 시간복잡도 차원에서 Array보다 훨씬 좋다. ( Set 객체는 내부적으로 key와 value가 동일한 구조이며 add되는 순서가 보장된다 그리고 iterable 하기에 순회함수를 쓰기에도 좋다 ). 해당 문제의 시간 복잡도는 O(n) 이다.  /** * @param {string} path * @return {boolean} */var isPathCrossing = function (path) { let position = [0, ..
JWT ( Json Web Token )
·
⭐FE
📌배경JWT는 웹 개발에서 인증방식으로 많이 사용하는 방식으로 웹 개발자라면 해당 토큰에 대해 알고 있어야 한다. 중요한 사항인 만큼 포스팅으로 한번 정리하는 시간을 가지려고 한다. 📌구조JWT는 Header, Payload, Signature 로 구성되어 있고 각 영역마다 특정내용이 담겨있다. token은 보통 아래와 같이 생겼으며 각영역은 . (맞침표) 로 구분되어 있다. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c정확히는 jwt는 header, payload, s..
LeetCode [JS] > 1128. Number of Equivalent Domino Pairs
·
🔒Algorithm
문제링크https://leetcode.com/problems/number-of-equivalent-domino-pairs/description/풀이처음 푼 방식이다. 어렵지 않게 풀 수 있었으며 시작 복잡도는 O(n) 이다. 지금 생각해보면 굳이 arr.sort()를 통해 정렬한뒤 join으로 새로운 배열을 생성한 뒤 다시 연산을 할게 아니고 처음 arr를 순회하면서 모든 연산을 처리할 수 있었다. 이런 개선점들이 보여 한번 더 정리를 했다. (하단 2번째 코드 확인)/** * @param {number[][]} dominoes * @return {number} */var numEquivDominoPairs = function (dominoes) { dominoes = dominoes.map((ar..
JavaScript의 소수점 오차 생기는 이유
·
⭐FE
✅배경프론트엔드 개발을 하다 아래와 같은 경우를 볼 수 있다.분명히 0.1+0.2는 0.3이어야 되는데 0.3000000... 4 인 이유가 뭘까? 그 이유는 자바스크립트는 IEEE754 64비트 `부동소수점` 방식으로 저장 되기 때문이다💡자바스크립트의 숫자 표현방식자바스크립트에서 모든 숫자는 내부적으로 IEEE754 64비트 부동소수점 방식으로 저장된다. 이 방식은 어떤 수를 저장하기 위해 64비트를 쓰며 항상 수를 1.??? * 2^n 형태로 인식하고 ???는 가수부, n부분은 지수부로 보고 각각 11비트, 52비트를 이용하여 표현한다. 추가로 1비트는 양수/음수를 구분하기 위해 사용한다.부호부: 1비트 사용, 양수/음수 구분 (0:양수, 1:음수)지수부: 11비트 사용, 2의 거듭제곱을 표현 ..