01 — SORTING

정렬 알고리즘

배열을 정렬하는 다양한 알고리즘을 시각적으로 비교합니다. 노란색=비교, 분홍색=교환, 초록색=정렬 완료.

속도: 5
알고리즘을 선택하면 시각화가 시작됩니다.
03 — RECURSION

재귀

재귀 함수는 자기 자신을 호출합니다. factorial(n)의 콜 스택이 쌓이고 되돌아오는 과정을 확인하세요.

5
04 — BIG-O

빅오 표기법

알고리즘의 시간 복잡도를 비교합니다. n이 커질수록 각 복잡도 클래스의 차이가 얼마나 커지는지 확인하세요.

n: 20
05 — BITMASK ✦ NEW

비트마스크

비트마스크는 정수의 각 비트를 플래그로 사용해 집합을 표현합니다. 상태 압축, 부분집합 탐색에서 강력한 도구입니다. AND, OR, XOR, NOT, SHIFT 연산을 직접 체험해보세요.

A
0
AND
B
0
=
0
실용 예제
집합 표현
집합 {1,3,5} → 비트 1,3,5 ON
0b00101010 = 42
bit i가 1 ↔ 원소 i 포함
원소 추가/제거
추가: S |= (1 << i)
제거: S &= ~(1 << i)
포함: (S >> i) & 1
부분집합 순회
for(s=S;s;s=(s-1)&S)
전체 부분집합: 2^n가지
상태압축 DP에서 활용
비트 트릭
최하위비트: x & (-x)
비트수 세기: popcount(x)
짝수 검사: (x & 1) == 0
06 — SUFFIX ARRAY ✦ NEW

접미사 배열

문자열의 모든 접미사를 정렬한 배열입니다. 문자열 검색(O(m log n)), 최장 공통 부분 문자열 탐색 등에 사용됩니다. 접미사를 사전순 정렬하면 이진 탐색으로 패턴을 빠르게 찾을 수 있습니다.

순위원본 인덱스접미사LCP
LCP = 인접한 정렬된 접미사 간의 최장 공통 접두사 길이. 첫 번째 항목은 정의되지 않습니다(—).
07 — DYNAMIC PROGRAMMING

동적 프로그래밍 (DP)

복잡한 문제를 부분 문제로 나누고, 그 결과를 저장(메모이제이션)하여 중복 계산을 피하는 알고리즘 기법입니다. 최적 부분 구조 + 중복 부분 문제가 핵심 조건입니다.

① 피보나치 — 메모이제이션 vs 단순 재귀
7
② 최장 공통 부분 수열 (LCS)
vs
③ 0/1 배낭 문제 (Knapsack)
용량 W 이하에서 최대 가치를 선택하는 문제. DP[i][w] = 아이템 i까지 고려 시 용량 w에서 최대 가치.
10
DP 핵심 조건: 최적 부분 구조 (큰 문제의 최적해 = 부분 문제 최적해 조합) & 중복 부분 문제 (같은 계산 반복). 접근법: 탑다운(재귀+메모이제이션) vs 바텀업(반복문+테이블).