HOME
[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 ..
[JS] split() 메서드에서 빈 문자열이 생기는 원리
[JS] split() 메서드에서 빈 문자열이 생기는 원리
2024.05.24str.split(separator, limit?) 메서드는 구분자(separator)를 기준으로 문자열을 분리할 때 사용하한다. 사용법도 간단하고 개발하면서 가장 많이 사용하는 메서드 중 하나다. 하지만 split()을 사용하다보면 의도치 않게 '' 빈 문자열이 생기는 상황이 종종 발생한다. split() 메서드는 문자열 시작 지점부터 구분자를 탐색하면서 그 사이에 어떤 문자열이 존재하는지 확인한다. 만약 구분자를 제외하고 다른 문자열이 없으면 빈 문자열을 반환한다. 정리하면 아래 3가지 상황에 부합할 때마다 빈 문자열이 발생한다. 구분자가 문자열 처음에 위치할 때구분자가 문자열 마지막에 위치할 때구분자 두 개가 연속으로 나타날 때'?apple'.split('?'); // ['', 'apple']'??..
[React] Proxy를 활용한 Custom Lazy Import
[React] Proxy를 활용한 Custom Lazy Import
2024.05.24React.lazy()React에서 코드 분할을 목적으로(Chunk 분리) 컴포넌트를 Dynamic Import 할 때 React.lazy() 함수를 사용한다. 컴포넌트가 필요한 시점에만 로드되기 때문에, 로딩 중 표시할 컴포넌트나 메시지는 를 활용하여 설정한다. 여러 개의 lazy 컴포넌트를 묶어서 fallback을 한 번에 표시할 수도 있다. 또한, React.lazy()로 불러오려는 컴포넌트는 기본적으로 default export를 사용해서 내보내야 한다.// Child.tsxexport default function Child() { /* ... */ }// Parent.tsximport { Suspense } from 'react';// 컴포넌트 바디에서 호출하면 정상 작동하지 않으므로 주의co..
[Vite] 초기 로드 시간 개선을 위한 Vendor Chunk 쪼개기
[Vite] 초기 로드 시간 개선을 위한 Vendor Chunk 쪼개기
2024.05.24Intro프론트엔드 영역에선 .jsx, .tsx, .vue 등의 확장자를 가진 파일을 사용하지만 브라우저는 이를 이해하지 못한다. 때문에 이러한 파일들은 모두 .js 파일로 변환해야 한다. 모든 파일을 하나의 .js 파일로 만들 수 있지만 이 방식은 성능에 부정적인 영향을 줄 수 있으므로 권장되지 않는다. 대신 여러 .js 파일(chunks)로 변환한 뒤 필요한 순간에만 로드(지연 로딩)하는게 성능에 더 유리하다. 특히 초기 로딩 시간을 줄일 때 유용하다. Vite, Webpack 같은 번들러는 보통 index, vendor 두 개의 메인 chunk를 생성한다. 참고로 Vite 2.9 버전부턴 Production 종속성 모듈이 index chunk에 포함된다.index : App.tsx와 같은 어플리케이..
[Markdown] GitHub 마크다운 작성 꿀팁 모음
[Markdown] GitHub 마크다운 작성 꿀팁 모음
2024.05.23Admonition Box인용구(Blockquote)를 활용해서 중요한 정보를 강조할 수 있다. NOTE, IMPORTANT, WARNING 세 가지 타입을 지원하며, 각 타입에 해당하는 아이콘과 컬러로 자동 변경된다. 참고로 README.md 마크다운 편집기에선 미리보기(Preview)로 표시되지 않지만 저장 후엔 정상적으로 표시된다.> [!NOTE] > Highlights information that users should take into account, even when skimming.> [!IMPORTANT] > Crucial information necessary for users to succeed.> [!WARNING] > Critical content demanding immed..
[JS] 자바스크립트 ES2023 불변성 배열 메서드 톺아보기
[JS] 자바스크립트 ES2023 불변성 배열 메서드 톺아보기
2024.05.23Mutable / ImmutableArray.sort(), Array.reverse(), Array.splice() 같은 배열 메서드는 원본 배열을 변경한다. 객체(배열) 자체를 변경하면 예상하지 못한 사이드 이펙트가 발생할 수 있다. 아래 코드에서 reversed는 결과적으로 regions 배열을 가리키고 있다. 즉, regions reversed 이 둘은 동일하다.const regions = ['Seoul', 'Shanghai', 'Tokyo'];const reversed = regions.reverse();console.log(regions); // ['Tokyo', 'Shanghai', 'Seoul']console.log(reversed); // ['Tokyo', 'Shanghai', 'Seoul..
[JS] 영어 축약어 관련 유틸리티 함수 모음
[JS] 영어 축약어 관련 유틸리티 함수 모음
2024.05.22참고 내용영어에서 Contraction(축약/단축형)과 Abbreviation(약어/축약어)는 다른 개념이다. Contraction: 두 단어를 하나로 줄이기 위해 일부 문자를 생략하고 아포스트로피로 대체한 형태 e.g. I will → I'll, do not → don'tAbbreviation: 단어나 구의 일부 문자만을 사용하여 줄인 형태. 아포스트로피를 사용하지 않는다 e.g. United States → U.S., Doctor → Dr. 축약은 분리 기준에서 제외하는 정규식단어 문자가 아닌 문자열 기준으로 분리// 단어 문자가 아닌 문자열과 일치const NonWordCharPattern = /(\W)/g;const sentence = "I'll make coffee and I've done m..