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, ..
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..
LeetCode [JS] > 859. Buddy strings
·
🔒Algorithm
📌문제링크https://leetcode.com/problems/buddy-strings/🔨문제풀이이 문제는 s, goal 이 서로 완전히 동일한 문자일 때, 문자열 길이가 다를때, 문자중에 2개만 다를때를 분기처리하여 풀면 된다. 결국 경우를 파악할 수 있어야 한다. 조금만 생각하면 쉽게 풀 수 있다. 시간복잡도는 O(n)이다. 완전히 동일한 문자열일 때는 s 문자중 중복되는 문자가 있으면 해당 문자끼리 순서를 바꿔도 동일한 문자열이 되는데 이를 확인하기 위해 나는 Set() 객체를 썻다. Set 객체는 얼핏보면 시간 복잡도가 O(n^2) 처럼 보일 수 있는데 Set객체는 내부적으로 Hash Table을 사용하여 실제론 O(n) 이다. /** * @param {string} s * @param {st..
LeetCode [JS] > 2780. Minimum Index of a Valid Split
·
🔒Algorithm
문제링크https://leetcode.com/problems/minimum-index-of-a-valid-split/description/문제풀이dominant한 수는 주어진 배열에서 정확히 1개라고 전제가 되어 있다. 배열에서 특정 수가 반보다 많이 등장한다는 애기이다. 예를들어서 [1,2,3,2] 이런 배열은 dominant수가 없기 때문에 주어질 수 없다는 애기이다.  주어진 배열을 split 하여 왼쪽, 오른쪽 2개의 배열로 나누었을 때 각 배열의 dominant한 수가 같은 split point를 알아야 된다.주어진 배열에서 dominant한 수는 한개이므로  애초에 주어진 배열을 2개로 나누고 각 배열의 dominant한 수가 같을 때 그 수는 원래 배열의 dominant 수일 수 밖에 없다...
LeetCode > 2208 Minimum Operations to Halve Array Sum
·
🔒Algorithm
📌링크https://leetcode.com/problems/minimum-operations-to-halve-array-sum/description/🔨풀이이 문제의 조건을 보면 단순히 정렬을 이용해서 풀면 시간초과가 날 것이라고 생각되어 우선순위 큐를 이용하여 연산횟수를 최적화 하였다. 우선순위 큐를 구현하기 위해 힙(완전이진 트리) 자료구조를 이용하였고 우선순위 큐에서 가장 큰 값을 반으로 나누면서 계산횟수를 카운팅 하여 문제를 풀 수 있었다. 해당 문제의 시간복잡도는 O( n log n ) 이다. ( 시간복잡도 관례대로 log의 밑은 생략 )  /** * @param {number[]} nums * @return {number} */var halveArray = function (nums) { ..
LeetCode > 1346. Check If N and Its Double Exist
·
🔒Algorithm
문제https://leetcode.com/problems/check-if-n-and-its-double-exist/풀이쉽게 풀 수 있다. 시간 복잡도는 O(n^2) 이다./** * @param {number[]} arr * @return {boolean} */var checkIfExist = function(arr) { for(let i =0; i
LeetCode > 806. Number of Lines To Write String
·
🔒Algorithm
➕문제https://leetcode.com/problems/number-of-lines-to-write-string/description/➕풀이character의 코드를 이용하면 쉽게 풀 수 있다. 시간 복자도는 O(n) 이다./** * @param {number[]} widths * @param {string} s * @return {number[]} */var numberOfLines = function (widths, s) { let base = "a".charCodeAt(0); let line = 1, pixels = 0; for (let i = 0; i
웹 서비스 캐시 다루기
·
⭐FE
📌배경웹 성능을 높이는 데 있어 HTTP 캐시 전략은 굉장히 중요하다. 캐시를 잘못 설정하면 불필요한 요청이 발생하거나, 반대로 변경된 리소스를 사용하지 못해 사용자 경험을 해치는 일이 발생할 수 있다.📌캐시의 생명주기 HTTP 캐시 전략에서 핵심은 리소스의 유효 기간을 얼마나, 어떤 조건으로 설정할지를 결정하는 것이다. 대표적인 설정값은 다음과 같다.max-age=: 캐시 유효 시간, 이 시간 동안은 서버에 요청하지 않고 캐시 사용no-cache: 캐시를 저장하지만, 사용할 때마다 서버에 재검증 요청을 보냄no-store: 캐시를 저장하지 않음. 로그인 정보나 민감한 리소스에 적합함📌캐시 이후의 동작: 재검증max-age 시간이 지난 후 브라우저는 서버에 재검증 요청을 보낸다. 이 때 조건부 요청..
이미지 포맷 형식 ( JPG, JPEG, PNG, WEBP )
·
⭐FE
📌배경프론트엔드 개발자로 근무하다 보면 여러가지 이미지를 다뤄야 할 때가 있다. 대표적으로 많이 사용되는 이미지 포맷형식으로 JPG(JPEG), PNG, WEBP, GIF 가 있다. 물론 그 외에도 엄청 많긴하지만 대표적으로 사용되는 몇가지를 정리하려고 한다.📌JPG (JPEG)- joint photographic experts group 의 약자로 손실 압축 포맷이다.- 압축 손실 포맷이지만 크기가 작기 때문에 웹에서 널리 쓰인다.- 용량 대비 이미지 품질이 괜찮다. - 압축률을 높이면 파일 크기는 작아지지만 이미지 품질은 더욱 떨어진다. - 투명도는 지원 하지 않는다. 📌PNG - Portable Network Graphic 의 약자로 jpg보다 용량이 크지만 비손실 압축 방식으로 품질 저하가 ..