banner 출처

오늘의 삽질

Git commit convention에 대해 알아보기!

  • Git을 이용해 협업을 하는 경우, 서로 commit을 마구잡이로 하면 팀원들은 이해하기 어렵다!
    => 그렇기에 commit에 약속(convention)을 정해 이를 준수하는 것이다!

  • 약속의 기본 템플릿!

    <type>[optional scope]: <description>
    [optional body]
    [optional footer(s)]
    
    1. <type> 은 수정사항의 종류를 나타내준다! [optional scope] 은 수정된 곳이 어딘지 알려줄 때 사용할 수 있다!
      (이슈 숫자를 써두면 링크가 이어진다! e.g. Fix #1 )

      => <description> 은 제목 또는 내용이 될 수 있다!

      Tag Name Description
      Feat 새로운 기능을 추가
      Fix 버그 수정
      Docs 문서 수정
      Refactor 프로덕션 코드 리팩토링
      Comment 필요한 주석 추가 및 변경
      Test 테스트 코드, Production Code(실제로 사용하는 코드) 변경 없음
      Chore 빌드 업무 수정, 패키지 매니저 수정, 패키지 관리자 구성 등 업데이트, Production Code 변경 없음
      Rename 파일 혹은 폴더명을 수정하거나 옮기는 작업만인 경우
      Remove 파일을 삭제하는 작업만 수행한 경우
      Style 코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우
      Design CSS 등 사용자 UI 디자인 변경
      !BREAKING CHANGE 커다란 API 변경의 경우
      !HOTFIX 급하게 치명적인 버그를 고쳐야하는 경우
    2. [optional body] 및 [optional footer(s)]

      • [optional body]는 <description> 에서 내용을 설명하지 못할 경우, <description>을 제목으로 사용하여 [optional body]에 내용을 자세히 적어놓는 용도로 쓴다!

      • [optional footer(s)] 는 Issue Tracker를 표시할 때 사용해준다. => Fixes: #1 이라는 의미는 Issue의 1번을 수정중 이라는 뜻!

      Tracker Description
      Fixes: 이슈 수정중 (아직 해결되지 않은 경우)
      Resolves: 이슈를 해결했을 때 사용
      Ref: 참고할 이슈가 있을 때 사용
      Related to: 해당 커밋에 관련된 이슈번호 (아직 해결되지 않은 경우)
  • 예시!

git add ~~
git commit -m "Comment: 주석추가

파일의 코드에 관한 주석들을 새로 추가하였습니다!

Ref: #1"

Line_Number 코드 분석
1. 수정된 파일을 staging area(대기장소) 에 추가합니다!
2. 수정사항을 커밋합니다! 첫 줄은 종류와 제목을 입력 해줍니다
3. 빈 행을 추가해 제목과 내용을 분리해줍니다!
4. 본문 내용을 적습니다!
5. 빈 행을 추가해 내용과 꼬릿말을 분리해줍니다!
6. footer로 관련된 이슈를 링크해줍니다!

개선점 분석

  • 오늘부터 NodeJs 숙련 강의를 듣기 시작했는데,
    SQL 관련 문법들에 대해 새로 배우며 기존 내용도 복습하는 느낌이여서 원활한 이해 및 숙련을 위해서 내일부턴 SQL 코드카타도 같이 진행해야 겠다!

  • Git Commit 을 아무렇지 않게 눌렀던 과거를 반성해가며 오늘 배운 지식들을 활용해서 기록들을 잘 정리해두어야 겠다!

지식창고

알고리즘 코드 카타

문자열 내 마음대로 정렬

  • 문제
    문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.
    예를 들어 strings가 [“sun”, “bed”, “car”]이고 n이 1이면 각 단어의 인덱스 1의 문자 “u”, “e”, “a”로 strings를 정렬합니다.

  • 조건

    • strings는 길이 1 이상, 50이하인 배열입니다.

    • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.

    • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.

    • 모든 strings의 원소의 길이는 n보다 큽니다.

    • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

function solution(strings, n) {
    let answer = [];
    answer = strings.sort((a,b) => {return (a.substr(n,1)+a).localeCompare(b.substr(n,1)+b)})
    return answer;
}

K번째 수

  • 문제
    배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
    배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

  • 조건

    • array의 길이는 1 이상 100 이하입니다.

    • array의 각 원소는 1 이상 100 이하입니다.

    • commands의 길이는 1 이상 50 이하입니다.

    • commands의 각 원소는 길이가 3입니다.

function solution(array, commands) {
    const answer = [];
    for (const element of commands) {
        const cutting = array.slice(element[0]-1,element[1]).sort((a,b) => Number(a)-Number(b))
        answer.push(cutting[element[2]-1])
    }
    return answer;
}

두 개 뽑아서 더하기

  • 문제
    정수 배열 numbers가 주어집니다.
    numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.

  • 조건

    • numbers의 길이는 2 이상 100 이하입니다.

    • numbers의 모든 수는 0 이상 100 이하입니다.

function solution(numbers) {
    let answer = [];
    
    numbers.forEach((val,idx) => {
        for (let i = 0;i < numbers.length;i++) {
            if (i !== idx) {
                const num = val + numbers[i];
                answer.includes(num) ? 0 : answer.push(num)
            }
        }
    })
    return answer.sort((a,b) => Number(a)-Number(b));
}

가장 가까운 글자

  • 문제
    문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.

  • 조건

    • 1 ≤ s의 길이 ≤ 10,000

    • s은 영어 소문자로만 이루어져 있습니다.

function solution(s) {
    const answer = [];
    let array = s.split("");
    array.forEach((val, idx, arr) => {
        for (let i = idx;i >= 0;i--) {
            if (arr.indexOf(val, i) < idx){
                answer.push(idx - arr.indexOf(val, i))
                break
            } else if (i === 0) {
                answer.push(-1)
            }
        }
    })
    return answer;
}
  • 다른 코드 분석
function solution(s) {
    const hash={};
    return [...s].map((v,i)=>{
        let result = hash[v] !== undefined ? i - hash[v] : -1;
        hash[v] = i;
        return result;
    });
}

Line_Number 코드 분석
3. 입력된 문자열 s를 구조분해할당을 이용해 배열로 만들고, map() 메서드를 이용해 모든 글자에 함수를 적용시켜 새로운 배열을 만든다.
4. hash{} 객체에 key(v)의 값이 지정되지 않았으면 -1을, 있다면 현재 index에서 hash[v]를 뺀 값을 result에 저장한다
5. hash{} 객체의 key(v)의 값에 현재 index를 저장한다
6. return된 result들은 map()메서드에 의해 배열로 저장되어 값이 출력된다.

Reference

[Git] Commit Message Convention
[Git/Github] Commit Convention 이란?
programmers