Imported from dawwson/algorithm (
AGENTS.md). Install upstream withnpx skills add dawwson/algorithm. Copyright stays with the author.
알고리즘 풀이 문서 작성 지침
적용 범위
- 이 지침은 저장소 전체에 적용한다.
- 알고리즘 풀이 문서를 새로 만들거나 완성할 때는
template.md를 기본 구조로 사용한다. - 기존 문서의 언어와 서식 규칙을 유지한다. 사용자가 별도로 요청하지 않는 한 설명은 한국어로 작성한다.
분석 기준
- 대상 Markdown 파일에 있는 기존 Java 코드를 분석할 원본 풀이로 간주한다.
- 사용자가 코드 변경을 명시적으로 요청하지 않는 한 원본 Java 코드를 다시 작성하거나 최적화하는 등 수정하지 않는다.
Intuition,Approach,Complexity에는 연산 순서와 사용한 자료구조를 포함하여 실제 Java 구현의 동작을 설명한다.- 기존 문제 정보는 유지하며, 비어 있거나 미완성인 값 중 확실하게 판단할 수 있는 항목만 채운다.
문서 구조
template.md의 항목 순서와 Markdown 서식을 따른다.- 템플릿의 주석과 자리표시자는 간결하고 구체적인 내용으로 교체한다.
Intuition은 아래의Intuition 작성 기준을 따른다.Approach에는 다른 풀이를 제안하지 말고 실제 구현된 알고리즘을 단계별로 설명한다.Complexity에는 입력 크기를 나타내는 변수를 정의하고 시간 복잡도와 보조 공간 복잡도의 근거를 작성한다.<br>, 구분선, 제목, 코드 블록은 템플릿 및 인접 문서와 일관되게 유지한다.
Intuition 작성 기준
- 문제 설명을 반복하지 말고, 문제를 읽고 풀이 방법을 선택한 사고 과정을 드러낸다.
- 다음 흐름이 자연스럽게 이어지도록 작성한다.
- 문제에서 실제로 구해야 하는 값이나 핵심 조건을 짚는다.
- 입력 제한을 근거로 가능한 탐색 범위나 목표 시간 복잡도를 판단한다.
- 단순한 접근에서 반복 계산, 순서 처리, 중복, 경계 처리 등 문제가 되는 부분을 찾는다.
- 문제의 성질을 이용해 어떤 계산을 재사용하거나 어떤 자료구조·알고리즘을 활용할지 설명한다.
- 선택한 방법이 문제 조건을 만족하고 실제 구현으로 이어지는 이유를 정리한다.
Set을 사용한다,Queue를 사용한다처럼 결론만 적지 않는다. 중복 제거, FIFO 순서 유지, 최댓값 조회 등 해당 자료구조가 필요한 이유를 함께 적는다.- 시간 복잡도를 개선한 경우 이전 접근의 비용과 어떤 연산을 줄였는지 간단히 비교한다.
Approach의 구현 순서를 미리 나열하지 않고, 풀이를 떠올린 근거와 핵심 아이디어에 집중한다.- 불필요한 미사여구나 추상적인 표현을 피하고 문제의 조건, 코드의 연산, 자료구조를 구체적으로 언급한다.
Better Code 작성 기준
Better Code는 기업 코딩테스트에서 널리 사용하는 보편적인 알고리즘과 자료구조를 우선한다.- 같은 문제를 푸는 보편적인 방법이 여러 개라면 시간 또는 공간 복잡도가 더 좋은 방법을 선택한다.
- 다음 조건을 모두 만족할 때만
### Better Code (Java)항목을 추가한다.- 시간 또는 공간 복잡도가 실질적으로 개선되거나, 문제 유형을 대표하는 의미 있는 다른 알고리즘인 경우
- 문제의 입력 제한에서 사용할 이유가 있는 경우
- 코드만 읽어도 핵심 알고리즘을 파악할 수 있고 설명하기 쉬운 경우
- 비트 패킹, 과도한 인코딩, 문제에 비해 복잡한 자료구조처럼 이론적 성능만을 위한 특이한 최적화는 추가하지 않는다.
- 복잡도가 더 좋더라도 해당 문제에서 일반적으로 사용하지 않는 방식이면 기본적으로 제외한다. 필요한 경우 문서에 추가하지 않고 참고 사항으로만 설명한다.
- 변수명 변경, 문법 축약, 조기 반환 위치 변경 등 알고리즘과 복잡도가 같은 단순 리팩터링은 Better Code로 추가하지 않는다.
- 조건을 만족하는 풀이가 없으면
Better Code를 억지로 추가하지 않는다. - 기존 Better Code가 위 조건을 충족하지 않으면 설명과 불필요한 여백을 포함해 해당 항목 전체를 삭제한다.
- Better Code를 추가한 경우 변경점과 원본 풀이 대비 복잡도를 간단히 설명한다.
Python 코드
- 같은 문제를 기존에 풀어 둔 Python 파일이 저장소에 있으면 해당 코드를 문서에 추가한다.
- 기존 Python 풀이가 없으면 Python 코드를 새로 작성하지 않고
### Code (Python)항목도 제외한다. - 사용자가 명시적으로 변경을 요청하지 않는 한 기존 Python 풀이를 수정하지 않는다.
- Python 코드 블록 바로 아래에는 짧은 개조식 설명만 추가한다.
- 핵심 알고리즘, 중요한 Python 특성, 시간 및 공간 복잡도를 몇 개의 간결한 항목으로 요약한다.
- Java의
Intuition이나Approach내용을 Python 설명에 그대로 반복하지 않는다.
C++ 코드
- 사용자가 Java 코드를 제공하면 같은 알고리즘과 풀이 순서를 사용하는 C++ 코드를 작성한다.
- Java 풀이를 다른 알고리즘으로 최적화하거나 의미를 바꾸지 않고 C++ 표준 라이브러리에 맞게 옮긴다.
### Code (C++)제목과cpp코드 블록을 사용한다.- C++ 코드는 Python 풀이의 존재 여부와 관계없이 문서의 가장 하단에 배치한다.
- C++ 코드 블록 바로 아래에는 문제를 푸는 데 실제로 사용한 C++의 핵심 문법과 표준 라이브러리를 짧은 개조식으로 설명한다.
- 각 항목에는 문법이나 라이브러리의 이름과 해당 코드에서의 역할을 함께 적는다.
- 일반적인 문법을 모두 나열하지 않고, Java와 표현 방식이 다르거나 풀이 이해에 필요한 내용만 선택한다.
- 별도의 요청이 없으면 Java의
Intuition이나Approach를 C++ 설명에 반복하지 않는다.
검증
- 완성된 문서를 다시 읽고 모든 설명이 코드와 정확히 일치하는지 확인한다.
O()같은 자리표시자, 빈 코드 블록, 템플릿 주석이 의도치 않게 남아 있지 않은지 확인한다.- 복잡도 계산에 정렬 같은 라이브러리 연산과 입력 컬렉션 복사 비용이 반영되었는지 확인한다.
- C++ 코드가 원본 Java 코드와 같은 알고리즘 및 복잡도를 유지하는지 확인한다.
- C++ 코드 아래에 실제 사용된 핵심 문법과 라이브러리 설명이 있는지 확인한다.
