Skip to content

Latest commit

 

History

History
135 lines (109 loc) · 5.64 KB

File metadata and controls

135 lines (109 loc) · 5.64 KB

알고리즘 문제풀이 코드 기여하기

알고리즘 문제풀이 소스코드를 공유하고 싶은 경우, 아래 기여 방법을 확인해주세요!

서론

Algorithm 레포지토리는 알고리즘 문제풀이 소스코드를 공유하는 레포지토리 입니다. 이 레포지토리의 관리자는 깃헙을 능숙하게 다루는 편이 아닙니다. 다만, 알고리즘을 공부하면서 동시에 깃헙도 공부할 수 있는 프로젝트를 진행해보고자 만든 레포지토리입니다. 입문자들이라면 더더욱 환영입니다. Issue, Pull Request, Merge등 처음 접해볼 수 있는 어색한 기능들을 이곳에서 직접 날려보고 오류를 경험하며 공부하실 분은 언제든지 환영입니다.

본론

기여하기 전

  • 현재 레포지토리를 fork합니다.
  • 기여자님의 레포지토리에 생성된 fork 레포지토리를 로컬 저장소에 받습니다. (git clone)
  • 아래 형식에 맞게 디렉토리를 생성하거나 기존 디렉토리에 작업합니다.
  • 아래 형식에 맞게 코드에 주석으로 설명을 작성합니다.
  • 아래 형식에 맞게 커밋 메시지를 작성하여 fork한 레포지토리에 push합니다.
  • 아래 형식에 맞게 PR(Pull Request)를 전송합니다.

디렉토리 구조 및 파일 명칭 정하기(새롭게 추가할 경우만)

  • 프로그래밍 언어 > 문제 풀이 사이트 > 문제 풀이 소스 코드 파일 형태로 생성합니다.
  • 디렉토리 구조 및 파일명은 관리자 및 Collaborator들에 의해 언제든지 변경될 수 있습니다.
  • 언어와 문제풀이 사이트 구분만 확실히 해주시면 되고 따로 엄격한 룰은 존재하지 않습니다.
  • 소스코드 파일명의 제한은 없습니다. 자유롭게 하시면 됩니다.(다만, 어떤 문제인지 확인이 가능할 정도여야 합니다)
  • 소스코드 최상단에 문제의 링크를 주석처리 해주시면 더욱 좋습니다.
  • 만약, 중복된 문제의 다른 풀이가 존재하면 해당파일명-고유번호로 입력합니다.

백준 온라인 져지(BOJ), 자바스크립트

js > BOJ > 0~9999 > 1000.js

프로그래머스, 레벨1, 자바스크립트

js > Programmers > Level1 > 문제.js

  • 기타 알고리즘 혹은 자료구조 등에 대한 공부 내용을 올리실 때, 디렉토리가 존재하지 않을 경우에는 Issue 남겨주시면 신속하게 방안을 마련하도록 하겠습니다.

    ex) Issue: 자바스크립트 다익스트라 알고리즘에 대해서 공부한 내용을 올리고 싶은데 디렉토리가 존재하지 않습니다! 해결해주세요!

소스코드 작성하기

  • 최상단에 문제 링크를 입력합니다.
  • 입력값 예시, 출력값 예시, 입력값 파싱, 초기에 설정한 변수들을 입력합니다.
  • 소스코드를 입력합니다.(소스코드에 대한 설명을 주석으로 달아주시면 매우 좋습니다)
  • 채점 결과 및 풀이 알고리즘 참고 문서 등을 간단하게 입력합니다.
  • 정답과 무관한 값 확인용 출력 코드들은 삭제 부탁드립니다.
  • 2022년 3월 25일 이전에 작성된 코드들은 위 규칙이 지켜지지 않은 경우가 있습니다. Issue 남겨주시면 최대한 빨리 수정하겠습니다.
  • 예시
// 문제 링크: {링크}
/**
 * 입력값 예시
 * 6
 * 10 30 10 20 20 10
 *
 * 출력값 예시
 * 3
 *
 * 파싱
 * N = 6
 * arr = [10, 30, 10, 20, 20, 10]
 *
 * 초기 설정
 * count = [1, 1, 1, 1, 1, 1]
 * max = 1
 */
const fs = require("fs");
let [N, arr] = fs.readFileSync("input.txt").toString().split("\n");
arr = arr.split(" ").map(Number);
let count = new Array(+N).fill(1);
let max = 1;

/**
 * 주어진 arr의 뒤에서부터 시작한다.
 * arr[i] 이후의 수 중 arr[i]보다 작은 수들에 대하여 (arr[j] < arr[i])
 * count[i], count[j] + 1 의 대소비교 후 큰 값을 count[i]값으로 지정
 * max값 업데이트
 */
for (let i = arr.length - 2; i >= 0; i--) {
  for (let j = arr.length - 1; j > i; j--) {
    if (arr[j] < arr[i]) {
      count[i] = Math.max(count[i], count[j] + 1);
      max = Math.max(max, count[i]);
    }
  }
}
console.log(max);
/**
 * 메모리: 9676KB
 * 시간: 220ms
 * 언어: JS
 * 해설 참조 링크: https://blog.naver.com/y2kdj9723/222681642602
 */

커밋 메시지 작성하기

  • [문제사이트-문제번호-프로그래밍언어] 문제번호(제목) 형태로 입력합니다.
  git commit -m "[BOJ-1000-JS] A+B"
  • 기존 문제 풀이 소스코드를 수정할 경우에는 fix: 를 추가합니다.
  git commit -m "fix: [BOJ-1000-JS] A+B"
  • 실패한 문제풀이의 경우 소스코드의 주석 형태와 설명을 유지한 체 커밋 메시지에 fail:을 추가합니다.
  git commit -m "fail: [BOJ-1000-JS] A+B"
  • 블로그 글을 작성하고 참조하고 싶을 때는 blog:를 추가합니다.
  git commit -m "blog: [BOJ-1000-JS] A+B"

PR 전송하기

  • 'PR' 메시지는 커밋 메시지와 동일합니다.
  • 'PR'은 그날 배운 내용 혹은 풀었던 문제들을 주석과 함께 정리하여 전송합니다.
  • 한 번의 'PR'에 너무 많은 내용을 담지 않도록 합니다.
  • 가급적 하나의 주제 혹은 문제를 정리해서 올립니다.(너무 많은 내용을 한번에 올리시면 반영에 어려움이 있습니다.)
  • 'comment'의 형식은 자유롭게 작성하나, 가장 어려웠던 부분, 새롭게 배운 것 위주로 작성합니다.
  • Collaborators의 Approval이 최소 한 개 이상일 때, Merge됩니다.
  • 'PR' 전송했지만 답변이 없는 경우 Issue나 메일 보내주시면 감사하겠습니다.