HOME
[Algorithm] 순열 / 조합 개념과 알고리즘 구현
[Algorithm] 순열 / 조합 개념과 알고리즘 구현
2024.05.28순열 Permutation개념순열은 서로 다른 n개 요소 중에서 r개를 선택하여 순서대로 나열하는 방법을 의미한다. 순열에선 순서가 결과에 영향을 미치기 때문에 순서가 중요하다. 동일한 요소를 서로 다른 순서로 나열하면, 각각을 별개의 순열로 간주한다. 예를 들어 A, B, C에서 A, B 두 요소를 선택하는 경우 AB와 BA는 서로 다른 순열이다. A 선택, 남은 글자 B, CB 선택, 남은 글자 C (2자리 순열이므로 무시) → ABC 선택, 남은 글자 B (2자리 순열이므로 무시) → ACB 선택, 남은 글자 A, CA 선택, 남은 글자 C (2자리 순열이므로 무시) → BAC 선택, 남은 글자 A (2자리 순열이므로 무시) → BCC 선택, 남은 글자 A, BA 선택, 남은 글자 B (2자리 순열..
[React] 리액트에서 setTimeout 더 편하게 쓰기
[React] 리액트에서 setTimeout 더 편하게 쓰기
2024.05.28React에서 setTimeout 같은 타이머 API를 사용할 때 컴포넌트의 생명주기를 고려하지 않으면 메모리 누수나 예기치 않은 예외가 발생할 수 있다. 예를 들어 타이머를 설정한 후 컴포넌트가 언마운트돼도 타이머는 여전히 실행되고, 이후 타이머 콜백에서 언마운트된 컴포넌트의 상태를 업데이트하려고 하면 에러가 발생할 수 있다. 위 같은 상황을 방지하기 위해 useEffect의 클린업 함수에 타이머 해제 로직을 추가한다. 하지만 한 컴포넌트에서 여러 타이머를 관리해야 한다면 메모리 누수 뿐만 아니라 타이머를 관리하기 위한 로직 때문에 컴포넌트의 복잡성이 높아질 수 있다. 만약 별도의 커스텀 훅에서 타이머를 관리하고, 커스텀 훅이 언마운트 될 때 모든 타이머를 자동으로 해제한다면 해당 훅을 사용하는 곳에선..
[React] 크롬 확장 프로그램 개발 배경 지식 및 튜토리얼
[React] 크롬 확장 프로그램 개발 배경 지식 및 튜토리얼
2024.05.28크롬 확장기능 주요 기능사용자 인터페이스 사용자화 : 브라우저 툴바에 버튼 추가, 사용자 정의 팝업/오버레이 생성 등콘텐츠 스크립트 : 웹페이지에 직접 스크립트를 삽입하여 DOM 조작 가능백그라운드 스크립트 : 브라우저를 사용하는 동안 지속적으로 실행돼서 필요한 기능 제공API 접근 : 북마크/탭/윈도우 관리, 히스토리 조작 등 브라우저의 다양한 영역 접근 가능🔍 탭 이동, capture, zoom 등 다양한 방식으로 제어 가능메시징 시스템 : 확장 기능의 다른 컴포넌트 혹은 웹페이지와 메시지 교환 가능웹 요청 조작 : 네트워크 요청 가로채기, 광고 차단, 프라이버시 보호, 웹 트래픽 관리 등🔍 chrome.webRequest API로 http 요청을 가로채거나 request header 수정 가능사..
[Algorithm] 자바스크립트 Map으로 구현하는 LRU Cache 알고리즘
[Algorithm] 자바스크립트 Map으로 구현하는 LRU Cache 알고리즘
2024.05.28LRU 캐시 특징캐시(Cache)는 데이터나 연산 결과를 일시적으로 저장하는 것을 가리킨다. 자주 사용하는 데이터나 연산 결과를 메모리 영역에 보관해서 동일한 정보를 요청받았을 때 더 빠른 속도로 제공할 수 있다. LRU 캐시는 대표적인 캐시 알고리즘 중 하나로 제한된 저장 공간을 관리하기 위해 가장 오래전에 사용한 데이터를 제거하는 알고리즘이다. LRU는 Least Recently Used의 약자로 사용한지 가장 오래된 정도로 해석할 수 있다. LRU 캐시에선 조회/쓰기시 해당 값을 가장 최근에 사용한 것으로 처리하는게 핵심이다. 자바스크립트 Map 등을 이용해서 구현할 땐 값이 뒤에 위치할 수록 가장 최근에 사용한 것으로 표시한다. 조회 : 캐시에 값이 존재하면 해당 값을 캐시 마지막(최신)으로 이동..
[Algorithm] 최소 힙(Heap)으로 우선순위 큐 구현하기
[Algorithm] 최소 힙(Heap)으로 우선순위 큐 구현하기
2024.05.28힙의 특징최단 경로를 찾을 때 널리 사용하는 다익스트라 알고리즘은, 탐색 큐의 자료구조가 전체 성능에 결정적인 영향을 미친다. 때문에 추가/삭제를 빠르게 수행할 수 있는 우선순위 큐를 주로 사용한다. 우선순위 큐는 일반 큐와 비슷하지만, 각 요소가 우선순위를 가지고 있으며, 우선순위가 높은 요소가 먼저 출력된다는 점이 다르다. 우선순위 큐는 크게 배열, 연결리스트, 힙 이렇게 세 가지 방법으로 구현할 수 있다. 그중 완전 이진 트리 구조를 갖는 힙으로 구현하면 추가/제거의 효율성이 크게 향상된다. 구현 방법삽입삭제순서 없는 배열O(1)O(n)순서 없는 연결리스트O(1)O(n)정렬된 배열O(n)O(1)정렬된 연결리스트O(n)O(1)힙O(log n)O(log n) 이진 트리는 각 부모 노드가 왼쪽/오른쪽 최..
[Algorithm] 다익스트라 알고리즘 — 최단 경로 찾기
[Algorithm] 다익스트라 알고리즘 — 최단 경로 찾기
2024.05.28문제 분석프로그래머스 레벨 2의 배달 문제(12978)는 마을 개수 N, 두 마을 사이의 거리 정보 road, 배달 가능한 시간(거리) K를 인자로 받아, 1번 마을에 있는 음식점이 K이하 시간에 배달할 수 있는 마을의 개수를 반환해야 한다. 마을 개수 N : 1 ≤ N ≤ 50거리 정보 : [[a, b, c], [...]]a b : 두 마을의 번호c : 두 마을의 거리(시간)배달 가능한 시간 K : 1 ≤ K ≤ 500,000 위 마을 이미지를 기준으로 1번부터 5번 마을까지 최소 배달 시간을 [번호, 시간] 배열 형태로 나타내면 아래와 같다. 만약 배달 가능한 시간 K가 3이라면 1, 2, 4, 5번 마을이 모두 3시간 이하여서 정답은 4가 된다. 이처럼 1번 마을에서 다른 모든 마을까지 소요되는 ..
[CS] 컴퓨터의 실수(Real Number) 표현 - 고정 소수점, 부동 소수점, 지수 표기법, 정규화 총 정리
[CS] 컴퓨터의 실수(Real Number) 표현 - 고정 소수점, 부동 소수점, 지수 표기법, 정규화 총 정리
2024.05.27실수를 2진수로 변환하기2진수는 0과 1, 두 개의 숫자만을 사용하여 정보를 표현하는 방법이다. 컴퓨터는 내부적으로 2진수를 이용하여 데이터를 저장하고 처리한다. 비트(bit)는 binary digit의 줄임말로 이진 숫자 체계의 기본 단위이다. 각 비트는 0 또는 1의 값을 가질 수 있다. 정수일상생활에서 사용하는 10진수 숫자 100을 2진수로 변환하려면, 몫이 0이 될 때까지 2로 나누고, 마지막에 나온 나머지부터(역순으로) 나열하면 된다. 유한 소수정수는 위처럼 간단하게 변환할 수 있지만, 0.5, 0.33 같은 실수를 변환하려면 더 복잡한 과정이 필요하다.예를 들어 10진수 68.625를 2진수로 변환하려면 숫자를 정수부와 소수부로 분리해야 한다. 10진수 68.625의 정수부는 68, 소수부..
[Algorithm] 유클리드 알고리즘 / 소인수분해로 최소공배수 최대공약수 계산하기
[Algorithm] 유클리드 알고리즘 / 소인수분해로 최소공배수 최대공약수 계산하기
2024.05.26N개의 최소공배수프로그래머스 레벨 2의 12953번 문제는 N개의 최소공배수를 구하는 문제다. 최소공배수는 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미한다. 예를들어 2와 7의 최소공배수는 14가 된다. 주어진 배열(arr)에서 가장 큰 수의 배수를 나머지 요소와 나눴을 때 모두 0이 되는 수를 찾는 방법으로 풀었지만, 매번 큰 수를 제외한 배열의 모든 숫자를 하나씩 나눠봐야 하기 때문에 효율적이지 않다. 배열 정렬을 제외하고 배열 길이가 n, while문의 반복 횟수가 x이라고 했을 때 시간복잡도는 $O(n \cdot x)$가 된다.function solution(arr) { const sortedArray = arr.sort((a, b) => b - a); const [bigges..
[Web] 커뮤니티 게시물/댓글의 요점만 뽑아서 정리해주는 - GigaBrain
[Web] 커뮤니티 게시물/댓글의 요점만 뽑아서 정리해주는 - GigaBrain
2024.05.26제품이나 서비스를 선택할 때 일반적으로 커뮤니티, 게시판, 각종 리뷰를 참고한다. 특히 가격이 비싸거나 한 번 구매하고 오랫동안 사용하는 고관여 제품은 이 과정에 생각보다 많은 시간을 할애하게 된다. 오늘은 이런 구매 결정을 도와주는 GigaBrain이란 서비스를 소개하고자 한다. 정보 검색이나 사용자 반응 등을 살필 때도 활용하기 좋다. GigaBrain은 레딧(Reddit) 같은 온라인 커뮤니티를 스캔해서 검색어와 관련된 게시물과 코멘트를 종합한 후 요약해 주는 서비스다. 실제 사용자들이 남긴 글을 기반으로 결과를 제공하기 때문에 일반적인 AI가 생성한 답변보다 정확도가 더 높다. 영어권에선 레딧이 가장 큰 커뮤니티라서 그런지 레딧 소스가 가장 많은 편이다. 기능 살펴보기GigaBrain에서 검색어..
[TS] 타입스크립트 구조적 타이핑 활용하기
[TS] 타입스크립트 구조적 타이핑 활용하기
2024.05.25Object.keys 메서드의 타입 정의타입스크립트를 사용하다 보면 아래 같은 상황을 자주 마주한다. Object.keys() 메서드를 사용해서 객체의 키를 배열로 추출한 후, 해당 키를 이용해 객체에 접근할 때 에러가 발생한다.type Options = { host: string; port: number };const validateOptions = (options: Options) => { const keys = Object.keys(options); // string[] keys.forEach((key) => { // Error! 'Options' 형식에서 'string' 형식의 매개 변수가 포함된 인덱스 시그니처를 찾을 수 없습니다. if (options[key] === null) ..
[Algorithm] 땅따먹기 알고리즘 / 동적 계획법
[Algorithm] 땅따먹기 알고리즘 / 동적 계획법
2024.05.25동적 계획법동적 계획법(Dynamic Programming, DP)은 복잡한 문제를 더 작은 하위 문제로 분할하고, 그 결과를 저장하면서 큰 문제를 해결하는 방법이다. 이를 통해 문제의 연산 시간을 효과적으로 줄일 수 있다. 동적 계획법을 적용하기 위해선 다음 두 가지 조건을 만족해야 한다. 피보나치 수열이 아래 두 조건을 만족하는 대표적인 예. 최적 하위 구조 Optimal Substructure작은 하위 문제의 최적 해를 조합하여 전체 문제의 최적 해를 얻을 수 있다.하위 문제 중첩 Overlapping Subproblem동일한 하위 문제가 반복적으로 발생한다. 동적 계획법은 중복 계산 방지를 위해 메모이제이션 혹은 타뷸레이션 기법을 사용한다. 메모이제이션은 재귀 호출을 사용하여 필요한 문제만 계산하..
GPT가 대답한 인간을 대체할 확률이 가장 높은 직업 20개
GPT가 대답한 인간을 대체할 확률이 가장 높은 직업 20개
2024.05.25X(Twitter)를 보다가 흥미로운 게시물을 발견했다. GPT-4o가 인간을 대체할 수 있는 20개 직업과, 대체할 수 없는 20개 직업을 GPT-4o에게 물어본 결과였다. 궁금해서 직접 물어봤다. 인간을 대체할 수 있는 20개 직업 영문 프롬프트List 20 jobs that GPT-o will replace human with into a table format ordered by probability. Columns are: Rank, Job, Why better than Human, Probability. 인간을 대체할 수 없는 20개 직업 영문 프롬프트List 20 jobs that GPT-4o cannot replace human with into a table format ordered ..