본문 바로가기

전체 글

(71)
이진 탐색 Binary Search 탐색은 배열 형태로 주어진 데이터에서 원하는 값을 가진 데이터를 찾는 문제이다. 이진 탐색은 탐색의 대상이 되는 데이터가 정렬된 상태로 주어진 경우에 효과적으로 탐색을 수행할 수 있다. 배열에서 탐색키 X를 찾는 과정은 다음과 같다. 정렬된 배열에서 가운데 있는 원소와 탐색키 X를 비교하여 두 값이 같으면 원하는 키를 찾았으므로 탐색을 종료한다. 그렇지 않으면 배열은 가운데 원소를 기준으로 왼쪽과 ㄷ오른쪽의 두 개의 부분배열로 분할되는데, 만약 X가 가운데 원소보다 작으면 왼쪽 부분배열을 사용해서 이진 탐색을 다시 수행하고, X가 가운데 원소보다 크면 오른쪽 부분배열을 사용해서 이진탐색을 다시 수행한다. 이러한 과정을 순환적으로 수행하면 배열에서 X를 찾거나 이진 탐색의 대상이 되는 부분배열이 빈 배열이..
Webpack5 기반 프로젝트에 Storybook 설정하기 Storybook6.2 버전부터는 Webpack5를 지원한다. 기존 방법과 달리 --builder 아규먼트를 추가하여 실행해야 한다. ㅇ Storybook 신규 설치 $ npx sb@next init --builder webpack5 ㅇ Storybook 6.2가 설치되어 있는 경우 $ npm i -D @storybook/manager-webpack5@next * 추가 자료 - https://storybook.js.org/blog/storybook-for-webpack-5 - https://gist.github.com/shilman/8856ea1786dcd247139b47b270912324
리눅스 서버 파일 사이즈 쉽게 확인하기 리눅스 서버의 메모리 사용량을 확인 후, 파일을 삭제해야하는 경우가 종종 발생한다. 특히 로그 파일같은 경우, 아래 명령어를 사용하면 좀 더 쉽게 삭제 대상 파일을 찾을 수 있다. $ ls -alh $ ls -alSh // 사이즈로 내림차순 정렬
[HackerRank] Luck Balance (javascript) 그리디 알고리즘 문제 유형이다. 두 가지 조건에 맞게 내림차순한다. T[i]이 다를 경우 내림차순 T[i]이 같을 경우 L[i]을 내림차순 내림차순한 배열을 순회하며 더하는데, 진 경기일 경우에는 값을 뺀다. 진 경기는 다음 조건을 만족하는 경기이다. k { if (a[1] !== b[1]) { return b[1] - a[1]; } else { return b[0] - a[0]; } }); let answer = 0; for (let i = 0; i < contests.length; i++) { // 최소 k(인덱스로는 k-1번)만큼은 져야하므로, T[i]가 1이고 i가 k번째부터는 이기는 경기이다. if (k
[HackerRank] Minimum Swaps 2 (javascript) 선택 정렬 방식으로 풀었다. 배열의 0번부터 순회하며, 제일 작은 위치를 찾아 나의 위치와 교환한다. function minimumSwaps(arr) { let result = 0; const array = arr.slice(); let i = 0; for (let cur of array) { let j = i + 1; let min = cur; let pointer = i; while (j array[j]) { min = array[j]; pointer = j; } j++; } if (min !== cur) result++; array[i] = min; array[pointer] = cur; i += 1; } return result; }
[HackerRank] Special String Again (javascript) 총 3가지의 경우일 때 same character가 된다. 각각의 문자 1개 문자의 갯수가 1이 아닌 홀수이고, 가운데 문자만 다를 때 문자의 갯수가 짝수이고, 모두 같을 때 function substrCount(n, s) { const array = s.split(""); const stack = Array.from({ length: n }, () => 0); // 배열의 초기화시킨다. // 1, 2번을 체크한다. let sum = 0; let i = 0; while (i < n) { const char = array[i]; let count = 1; let j = i + 1; while (j < array.length && char === array[j]) { count++; j++; } stack[..
[HackerRank] Largest Rectangle (Javascript) 푸는 방법은 총 세가지이다. (참고) stack으로도 풀어봐야겠다. function largestRectangle(h) { // Write your code here const array = h.slice(); let max = Number.MIN_SAFE_INTEGER; for (let i = 0; i 0 && array[i - 1] >= poin..
Context란? Context를 사용하면 일일이 props를 넘겨주지 않고도 컴포넌트 트리 전체에 데이터를 전달할 수 있다. 즉, 전역적으로 데이터를 공유할 수 있다. 포털의 메인 화면을 생각해보자. 아래 포털은 기본적으로 일반 모드이지만, 사용자가 취향에 따라서 다크 모드로 토글할 수 있다. 시퀀스를 따져보자면 아래와 같다. 1. 사용자가 다크 모드로 변환 버튼을 클릭한다. 2. 변환 버튼은 최상위 컴포넌트로 state를 끌어올린다. 3. 최상위 컴포넌트는 state를 변환하고, 다크모드 Style로 변경한다. setState({background: "dark"}); 4. 하위 컴포넌트는 부모 컴포넌트가 변환되었음을 감지하고 Render를 수행하며 다크모드를 적용한다. 최상위 컴포넌트부터 아주 깊은 컴포넌트까지 pro..