이 저장소는 알고리즘 문제 풀이의 판단 근거와 사고 흐름을 체계적으로 기록합니다.
단순히 코드만 저장하는 것이 아니라, 문제 분석부터 알고리즘 선택, 구현까지의 전체 사고 과정을 문서화합니다.
algorithm/
├── {문제집 사이트}/
│ ├── {알고리즘 카테고리}/
│ │ ├── {알고리즘명}.md # 공통 알고리즘 이론 정리 (예: backtracking.md, topological-sort.md)
│ │ ├── {문제 ID}/
│ │ │ ├── 1.analysis.md # 문제 요약 및 핵심 포인트 정리
│ │ │ ├── 2.algorithm.md # 알고리즘 적용 및 문제별 특이사항
│ │ │ ├── 3.reasoning.md # 알고리즘 적용 사고 과정
│ │ │ └── Main.java # 최종 해답 코드
│ │ └── ...
│ └── ...
└── README.md
- 문제집 사이트: 문제 출처 구분 (예:
boj,leetcode,programmers등) - 알고리즘 카테고리: 사용된 알고리즘 유형별 분류 (예:
topology-sort,brute-force,dynamic-programming등)- 각 카테고리 폴더에는 해당 알고리즘의 공통 이론 설명 파일이 포함됩니다
- 예:
backtracking.md,topological-sort.md등
- 문제 ID: 해당 사이트의 문제 번호 또는 식별자
각 문제는 4개의 파일로 구성되어 문제 해결의 전 과정을 추적할 수 있습니다.
문제 분석 및 요약
- 문제의 핵심 요구사항 요약
- 입력/출력 조건 정리
- 문제를 그래프, 수학, DP 등으로 어떻게 해석할 수 있는지 정리
- 문제 유형 분류 및 접근 방향 제시
알고리즘 적용 및 문제별 특이사항
- 상위 폴더의 공통 알고리즘 설명 문서로의 링크
- 이 문제에서의 알고리즘 적용 방법
- 문제별 특이사항 및 다른 문제와의 차이점
- 이 문제에 특화된 구현 패턴 및 주의사항
참고: 알고리즘의 전체 이론과 개념은 상위 폴더의 공통 알고리즘 설명 파일(예:
backtracking.md,topological-sort.md)에서 확인할 수 있습니다.
문제 적용 사고 과정
- 문제를 해당 알고리즘으로 풀기로 결정한 이유
- 문제를 알고리즘에 맞게 모델링하는 과정 (정점, 간선, 상태 정의 등)
- 단계별 해결 전략 및 구현 계획
- 주의해야 할 포인트, 실수 가능 지점
- 다른 접근 방법과의 비교
최종 해답 코드
- 제출용 해답 코드
- 주석을 통한 핵심 로직 설명
- 시간/공간 복잡도 명시
- 학습 효과 극대화: 문제를 풀고 끝내는 것이 아니라, 왜 그 알고리즘을 선택했는지, 어떻게 적용했는지를 기록하여 깊이 있는 학습
- 사고 과정 문서화: 나중에 비슷한 문제를 만났을 때 빠르게 참고할 수 있는 사고 흐름 기록
- 체계적인 관리: 알고리즘 유형별, 문제집별로 체계적으로 분류하여 관리
- 재현 가능한 학습: 단계별 문서를 통해 문제 해결 과정을 재현하고 복습
- 재사용성과 확장성: 공통 알고리즘 설명을 상위 폴더에 두어 같은 알고리즘을 사용하는 여러 문제에서 재사용 가능
각 알고리즘 카테고리 폴더에는 해당 알고리즘의 공통 이론 설명 파일이 포함됩니다.
- 위치:
{알고리즘 카테고리}/{알고리즘명}.md - 내용: 알고리즘의 개념, 동작 원리, 시간/공간 복잡도, 구현 패턴 등
- 용도: 같은 알고리즘을 사용하는 여러 문제에서 공통으로 참조
예시:
boj/brute-force/backtracking.md: 백트래킹 알고리즘 전체 이론boj/topology-sort/topological-sort.md: 위상 정렬 알고리즘 전체 이론
각 문제의 2.algorithm.md는 이 공통 설명을 링크하고, 해당 문제에 특화된 적용 방법과 특이사항만 추가로 설명합니다.