함께 만들어가는 알고리즘 라이브러리
기여의 단위는 하나의 파일(Eg. dijkstra.cpp
, binary-search.java
)이나 경로 (longest-increasing-subsequence/
)여야 합니다. 편의상 이 단위를 단위 파일
이라고 부르도록 하겠습니다.
- 하나의 파일이 아닌 폴더(경로)를 기여하고자 할 경우에는, 해당 폴더 내에 그에 대한 설명 문서가 존재해야 합니다. (README.md)
본 레포지토리의 파일 경로는 algorithms/{language}/{category}/{problem}
의 형태를 띄고 있는데,
{language}
는 코드에 사용된 언어를 뜻하고(Eg. C++의 경우CPP
, Java의 경우Java
, 등등),{category}
는 기여할 단위 파일의 주제나 분류를 뜻하며(Eg.Graph
,Sorting
등등),{problem}
은단위 파일
에 걸맞는 이름을 뜻합니다.(Eg.binary-search.java
,longest-increasing-subsequence
,persistent-segment-tree.cpp
, 등등)
하나의 단위 파일
은 아래와 같은 규칙들을 지켜야 합니다.
- 모든 파일명/경로명은 영어 소문자로 작성되어야 합니다.
- 띄어쓰기가 필요한 경우 대시/하이픈 기호를 사용해야 합니다(
-
).
아직 존재하지 않는 주제/분류에 대한 기여를 하거나, 이미 존재하는 주제/분류의 하위 주제로 볼 수 있는 항목에 대한 기여를 할 경우 그에 알맞게 새로운 경로를 생성해도 좋습니다.
- 코드 내에 외부 라이브러리에 대한 참조는 허용하지 않습니다.
- 각 언어별 표준 라이브러리의 사용은 허용됩니다.
- 기여의 단위는 하나의 알고리즘이나 자료구조, 혹은 그를 응용한 하나의 문제 상황에 대해서만 이루어져야 합니다.
- 해당 항목에 대한 코드를
algorithms
경로에 기여하거나, 자세한 설명 문서를docs
경로에 기여하면 됩니다.- 주제/분류에 대한 설명일 경우
docs
에, 코드 자체에 대한 설명일 경우 코드와 같은 경로에 별도의 문서(Eg. README.md)를 첨부하여 하나의 폴더로 기여하면 됩니다.
- 주제/분류에 대한 설명일 경우
- 해당 항목에 대한 코드를
- 기여한 내용에 대한 최소한의 설명은 주어져야 합니다.
- 코드는 최대한 가독성 있게 작성합니다.
- 필요한 경우, 적절한 주석을 첨부해 줍시다.
- 코드와 설명 문서를 탑재할 경우, 코드의 시간/공간 복잡도와 간단한 테스트 케이스를 함께 제공해 줍시다.
- 하나의 소스 코드 파일만을 기여할 경우엔, 해당 파일 내에 주석으로 위 사항들을 포함해 줍시다.
- 코드는 최대한 가독성 있게 작성합니다.
- 가급적이면 각 언어별 Naming Convention을 따르도록 합시다.
- 변수/함수명은 각 변수/함수의 목적이 뚜렷하게 드러나도록 합시다.