#data-structure
노트 27개
Frontend › JavaScript
구조 분해 할당배열·이터러블은 순서로, 객체는 이름으로 값을 꺼내 변수에 담는 문법. 건너뛰기와 나머지(rest), undefined일 때만 쓰이고 필요할 때만 평가되는 기본값, 이름 바꾸기, 중첩 패턴, 이미 선언한 변수에 할당할 때의 괄호, 두 변수 교환, entries와 함께 도는 반복, 그리고 매개변수 객체를 분해하는 '똑똑한 함수 매개변수'와 = {} 기본값을 정리한다.
Frontend › JavaScript
문자열 다루기JavaScript 문자열은 UTF-16 코드 단위의 나열이고 바꿀 수 없는 원시값이다. 따옴표와 이스케이프, 백틱 템플릿 리터럴(여러 줄·표현식 삽입·중첩)과 styled-components의 바탕인 태그드 템플릿, 글자 접근(at·charAt), 검색(includes·indexOf와 0의 함정), 부분 문자열(slice·substring·substr의 차이), 대소문자·공백·패딩, 유니코드 순 비교와 localeCompare·Intl.Collator, 서로게이트 쌍과 코드 포인트, normalize로 맞추는 유니코드 정규화, 짝 잃은 서로게이트를 찾는 isWellFormed까지 정리한다.
Frontend › JavaScript
배열·객체 다루기배열의 주요 메서드, length가 가장 큰 인덱스 + 1인 이유와 shift가 느린 이유, 배열 리터럴과 new Array(n)의 빈 슬롯(희소 배열), Array.from 같은 정적 메서드, 원본을 바꾸는 메서드와 바꾸지 않는 메서드(slice·toSorted·with), sort 비교 함수, 콜백을 받는 헬퍼 메서드와 콜백을 만드는 함수, reduce로 세기·묶기, 객체 리터럴과 키가 문자열로 바뀌는 규칙, 속성 접근과 Object.keys·entries, in·Object.hasOwn으로 속성 확인, spread의 얕은 복사가 빠뜨리는 것, rest, 형식화 배열. 문자열·구조 분해·JSON은 각자의 노트로 나눴다.
Frontend › JavaScript
JSON: stringify와 parseJSON은 언어와 무관한 데이터 교환용 텍스트 형식이다. 문법 규칙(큰따옴표, 주석 없음), JSON.stringify가 빠뜨리거나 바꾸는 값(undefined·함수·Symbol·NaN·Date·Map)과 순환 참조·BigInt 오류, replacer·space·toJSON으로 직렬화를 조절하는 법, JSON.parse의 reviver로 Date를 되살리는 법, 큰 정수를 지키는 source 접근과 JSON.rawJSON, 깊은 복사용으로는 structuredClone을 쓰는 이유까지 정리한다.
Frontend › JavaScript
Map과 SetMap은 어떤 값이든 키로 쓰고 넣은 순서를 지키는 키-값 컬렉션, Set은 중복 없는 값의 모음이다. 일반 객체와 비교해 언제 무엇을 쓸지, 주요 메서드와 순회, 객체와 서로 바꾸기, JSON으로 보낼 때의 제약, WeakMap·WeakSet, ES2025의 Set 집합 연산까지.
Frontend › JavaScript
SymbolSymbol은 만들 때마다 세상에 하나뿐인 값이 되는 원시 타입이다. 다른 코드와 겹치지 않는 속성 키로 쓰고, 일반 순회와 JSON에서는 숨겨진다. 설명(description)과 고유성, 전역 레지스트리의 Symbol.for·keyFor, 언어의 내장 동작을 여는 well-known symbol(Symbol.iterator·toPrimitive·toStringTag 등)을 정리한다.
Backend › Architecture
위치 기반 서비스 설계: 지오해시, 쿼드트리, 지도'내 주변 식당'은 모든 점과의 거리를 계산하면 느리므로 지도를 격자로 나눠 색인한다. 지오해시는 위경도를 접두사가 같으면 가까운 문자열로 바꿔 DB 색인으로 찾고, 쿼드트리는 밀도에 따라 칸을 쪼갠 메모리 트리로 찾는다. 지도 서비스는 위치 수집, 미리 잘라 둔 타일의 CDN 서빙, 지오코딩과 경로 계산으로 나뉜다.
Backend › Database
검색엔진의 원리: 역인덱스와 랭킹검색엔진은 문서를 토큰으로 쪼개 단어 → 문서의 역인덱스를 만들고(색인), 질의어를 같은 방식으로 처리해 찾은 뒤 TF-IDF·BM25 같은 점수로 순서를 정한다(질의). 한국어는 형태소 분석이나 N-gram이 필요하다.
Backend › Database
웹 검색엔진의 동작: 크롤링, 색인, 랭킹, 질의 처리웹 검색엔진은 크롤러가 링크 그래프를 따라 페이지를 모으고, 중복을 묶어 샤딩된 역인덱스에 넣은 뒤, 질의가 오면 의도를 해석해 후보를 뽑고 여러 랭킹 신호로 순서를 정한다. 크롤러의 URL 프런티어, PageRank, 2단계 랭킹, 구글의 랭킹 시스템과 네이버 통합검색의 컬렉션 구조를 자료구조·알고리즘 관점에서 정리했다.
Backend › Database
DB 내부 구조: 쿼리 실행과 인덱스 자료 구조SQL 한 문장이 파서·옵티마이저·실행기·버퍼 관리자·트랜잭션·잠금 관리자를 거쳐 처리되는 흐름, Oracle을 예로 본 엔진의 메모리(SGA·PGA)·백그라운드 프로세스·파일 구성과 테이블스페이스→세그먼트→익스텐트→블록의 논리 저장 구조, 그리고 DB가 데이터를 찾는 데 쓰는 자료 구조(B-트리, LSM 트리, 해시, 스킵 리스트, 역색인, R-트리 등)를 정리했다. B-트리는 읽기에, LSM 트리는 쓰기에 강하다.
Computer Science
C 프로그래밍C 언어의 컴파일 과정과 자료형·연산자·문자열, 포인터와 메모리, 구조체·공용체와 함수 포인터, 스코프와 링키지, 입출력, 빌드 도구(gcc·make)와 디버깅 도구, 호출 규약과 저수준 최적화, 역사와 표준.
Computer Science › C Programming
C 사용자 정의 타입과 함수 포인터: 구조체, 공용체, 열거형, typedefC의 사용자 정의 타입(구조체, 공용체, 열거형, typedef)과 함수 포인터를 정리한다. 구조체의 메모리 배치와 패딩, 멤버가 한 메모리를 공유하는 공용체와 태그 공용체·타입 퍼닝, int 상수일 뿐인 열거형, 새 타입이 아니라 별명인 typedef, 함수 포인터와 콜백, 그리고 이들을 조합해 캡슐화·다형성·제네릭 컨테이너를 흉내 내는 불투명 포인터와 가상 함수 테이블 패턴.
Computer Science › Programming Languages
C++ STL 컨테이너와 시간 복잡도C++ 표준 라이브러리의 vector·deque·list·set·map·unordered 컨테이너가 내부적으로 어떤 자료구조인지, 그래서 연산별 시간 복잡도가 어떻게 되는지 정리한다. vector 끝 삽입은 용량을 배수로 늘리기 때문에 분할 상환 O(1)이고, set·map은 레드-블랙 트리라 O(log n)이다.
Algorithm
자료구조, 탐색, 그래프, 알고리즘 설계 패러다임, 정렬, 복잡도 분석과 코딩 테스트 전략을 모은 알고리즘 노트.
Algorithm
자료구조알고리즘 문제에서 데이터를 담고 꺼내는 방식을 정하는 기본 자료구조 모음.
Algorithm › Data Structure
기초 자료구조: 배열에서 트라이까지연산의 약속(추상 자료형)과 구현(자료구조)을 나누는 관점, 배열과 realloc 크기 조정 비용, 배열·행렬 문제의 요령(부분 배열과 부분 수열, 인덱스 변환, 전치), 연결 리스트(C 구조체·Kotlin 예제)와 둘 중 고르는 기준, 더미 노드·제자리 뒤집기 같은 연결 리스트 기법, 층을 쌓아 건너뛰는 스킵 리스트, 이진 탐색 트리와 균형, 해시 테이블과 충돌, 트라이, 얕은 복사와 깊은 복사.
Algorithm › Data Structure
서로소 집합 (Union-Find)원소들이 어떤 집합에 속하는지 관리하며, 두 집합을 합치고 대표를 찾는 연산을 빠르게 처리하는 자료구조.
Algorithm › Data Structure
세그먼트 트리배열을 구간별로 나눠 각 구간의 합·최솟값 같은 요약을 이진 트리에 저장해, 값이 바뀌는 배열에서도 구간 질의와 갱신을 모두 O(log n)에 처리하는 자료구조. 배열 크기 잡기, 재귀 구현, 지연 전파와 펜윅 트리 비교까지 정리한다.
Algorithm › Data Structure
스택한쪽 끝에서만 넣고 빼는 후입선출(LIFO) 자료구조와 언어별 구현, 다음 큰 원소를 O(n)에 구하는 단조 스택.
Algorithm › Data Structure
큐와 덱먼저 넣은 것을 먼저 꺼내는 큐(FIFO)와 양쪽 끝에서 넣고 뺄 수 있는 덱, 스택 두 개로 큐·큐로 스택 만들기, 구현에 따라 달라지는 덱의 임의 접근 비용.
Algorithm › Data Structure
트리와 이진 탐색 트리계층 구조를 표현하는 트리의 용어, 이진 트리의 종류와 배열 표현, 네 가지 순회와 반복 구현, 이진 탐색 트리의 연산·편향·검증, 균형 트리의 종류와 AVL 회전, 레드-블랙 트리가 널리 쓰이는 이유, B 트리와 B+ 트리의 차이.
Algorithm › Data Structure
해시 테이블키를 해시 함수로 배열 인덱스로 바꿔 평균 O(1)에 찾는 해시 테이블의 원리, 해시 함수 설계(나눗셈·곱셈·다항·보편 해싱), 개방 주소법과 분리 연결법의 충돌 해결 비교와 이중 해싱의 약점, 적재율과 리사이즈, Java HashMap·Python dict 같은 실제 구현, 빈도 세기·애너그램 같은 문제 풀이 패턴, 해시 맵과 연결 리스트로 만드는 O(1) LRU·LFU 캐시.
Algorithm › Data Structure
힙과 우선순위 큐우선순위가 가장 높은 원소를 O(log n)에 넣고 꺼낼 수 있게 해 주는 완전 이진 트리 기반 자료구조, 편향되지 않는 이유와 힙 정렬, 크기 k짜리 힙으로 상위 k개를 O(n log k)에 구하는 방법.
Algorithm › Graph
그래프의 기본과 표현 방법정점과 간선으로 이루어진 그래프의 종류, 사이클 없는 그래프와 트리의 차이, 인접 행렬·인접 리스트로 저장하는 방법과 밀집·중복 간선의 처리, 탐색 기법과 놓치기 쉬운 경우.
Algorithm
현실 시스템을 움직이는 알고리즘과 자료구조일상 소프트웨어에서 자료구조가 쓰이는 곳(피드의 리스트, 실행 취소의 스택, 캐시의 해시 테이블, DOM의 트리, 지도 검색의 R-트리), 대규모 시스템 설계에 자주 나오는 알고리즘(일관된 해싱, 지오해시·쿼드트리, 블룸 필터, HyperLogLog, 토큰 버킷, 머클 트리, 합의 알고리즘), 세상을 움직이는 아홉 가지 알고리즘을 정리한다. 블룸 필터는 중복 URL 크롤링 방지 예로 자세히 본다.
AI & Data
비헤이비어 트리게임 AI·로봇·대화 시스템에서 행동을 고르는 트리 구조. 매 틱마다 루트부터 깊이 우선으로 평가하고, 노드는 Success·Failure·Running 중 하나를 돌려준다. Sequence·Selector·Parallel 복합 노드, 데코레이터, 액션·조건 리프로 행동을 조립하며, 상태 전이가 폭증하는 FSM보다 모듈화와 재사용이 쉽다.
Career › Work
컴퓨팅 사고와 개발 실력 늘리는 법컴퓨팅 사고는 문제를 분해·패턴 인식·추상화·알고리즘으로 다듬어 컴퓨터가 실행할 수 있는 절차로 바꾸는 사고다. 요구사항을 데이터의 관점으로 다시 정의하는 법, 알고리즘을 자연어·순서도·의사 코드로 적는 법과 순차·선택·반복의 세 제어 구조, 알고리즘 공부가 프론트엔드 개발자에게도 필요한 이유, 개발을 운동처럼 훈련하는 방법을 정리했다.