블로그
-
탐욕 알고리즘이 맞는지 증명하기: 교환 논증과 활동 선택·거스름돈·작업 스케줄링 예제
매 순간 최선을 고르는 탐욕법이 언제 최적해를 보장하는지 교환 논증으로 확인하는 방법입니다. 활동 선택, 분수 배낭, 거스름돈, 지연 최소화 스케줄링, 회의실 배정, 허프만 코딩을 C++로 구현하고 DP가 필요한 경우와 비교합니다.
-
C++ 수학 알고리즘: 에라토스테네스의 체, 유클리드 GCD, 모듈러 거듭제곱, 행렬, FFT
기약분수 계산의 오버플로, 느린 소수 판별, 거듭제곱 mod 시간 초과 같은 문제를 유클리드 GCD, 에라토스테네스의 체, 빠른 거듭제곱, 확장 유클리드·페르마 모듈러 역원, 행렬 거듭제곱으로 해결하는 C++ 코드를 봅니다.
-
C++에 스크립트 엔진 붙이기: Lua·pybind11·V8 선택 기준과 바인딩, 샌드박싱
밸런스 수정마다 재빌드하지 않도록 C++에 스크립트 엔진을 붙일 때, Lua·Python(pybind11)·V8 중 무엇을 고를지 기준을 세웁니다. 임베딩과 확장의 차이, 스레드 모델, 메모리·실행 시간 제한, 엔진별 샌드박싱 가능 범위를 비교합니다.
-
C++ 라이브러리 ABI를 깨지 않는 법: PIMPL, extern "C" 인터페이스, 버전 관리, 검증 도구
C++ 라이브러리 ABI 호환성: 구조체 레이아웃·vtable·name mangling이 깨지는 원리, extern "C" 경계와 크기 필드를 둔 확장 구조체, 시맨틱 버전과 SONAME·심볼 버전, abi-compliance-checker·libabigail로 CI에서 ABI 변경을 잡는 방법.
-
C++ 빌드 시스템 비교: CMake·Meson·Bazel·Makefile과 패키지 매니저 선택
새 C++ 프로젝트에서 CMake, Meson, Bazel, Makefile 중 무엇을 고를지 생태계·재현성·크로스 컴파일 관점에서 비교합니다. vcpkg와 Conan 중 어떤 패키지 매니저를 조합할지, 기존 프로젝트를 옮기는 절차와 자주 나는 빌드 오류도 정리했습니다.
-
C++ API 문서 자동화: Doxygen 주석, Sphinx·Breathe·Exhale 연동, GitHub Pages 배포
Doxygen 주석 문법과 Doxyfile 핵심 설정, Sphinx·Breathe·Exhale 연동, GitHub Actions로 GitHub Pages에 배포하는 과정과 심볼 누락·경로·인코딩·매크로 같은 자주 나는 문제의 원인을 예제로 설명합니다.
-
상황별 C++ 알고리즘 고르기: STL로 충분한 경우와 직접 구현할 때, 흔한 성능 함정
로그 검색, 중복 제거, Top-K 추출, 정렬된 범위의 구간 검색 같은 상황마다 어떤 STL 알고리즘이 맞는지 고르는 기준입니다. binary_search 전제 위반, remove 후 erase 누락, 비교자 약순서 위반 같은 흔한 실수도 짚습니다.
-
C++ 그래프 알고리즘: BFS·DFS, 다익스트라, Kruskal·Prim 최소신장트리, Union-Find
지도 최단 경로, 친구의 친구 탐색, 빌드 의존성 순서, 최소 비용 배선 같은 문제에 맞춰 BFS·DFS, 위상 정렬, 다익스트라, Kruskal·Prim, Union-Find를 C++로 구현합니다. 음수 간선에서 다익스트라가 틀리는 이유도 설명합니다.
-
C++ 동적 계획법: 메모이제이션 vs 타뷸레이션, 2D→1D 공간 최적화, 배낭·LCS·Bitmask DP
fib(40)이 느린 이유에서 출발해 메모이제이션과 타뷸레이션의 차이, 2D 테이블을 1D rolling array로 줄이는 방법을 설명합니다. 0/1 배낭, LCS, LIS, 편집 거리, Bitmask DP를 C++로 풀고 재귀 스택 오버플로를 피하는 법도 봅니다.
-
Visual Studio로 C++ 프로파일링·메모리 진단하기: vcpkg 연동까지
Visual Studio로 C++ 프로젝트를 구성하고 디버깅하는 방법, vcpkg Manifest 모드와 CMake 연동, CPU 사용량·인스트루먼테이션 프로파일러, 네이티브 힙 스냅샷과 CRT 누수 감지, C++ Core Check 코드 분석, 흔한 링크·심볼 문제 해결을 정리합니다.