2024.01.09 TIL - 알고리즘, git 2차 특강 정리(branch 생성, 이동, 삭제, 확인 / Pull Request/ 협업가이드)

Innes·2024년 1월 9일
0

TIL(Today I Learned)

목록 보기
34/147
post-thumbnail

📘 오늘의 공부

  • 알고리즘 Code Kata
  • git 2차 특강 정리

📝 알고리즘

  • 문제 1. 두 수의 나눗셈

    정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

  • 내 코드 : Math.floor()
function solution(num1, num2) {
    var answer = Math.floor(num1 / num2 * 1000)
    return answer;
}
  • 새로운 지식
    Math.floor()는 소수점을 내림한다. ex) Math.floor(23.3) = 23, Math.floor(-23.3) = -24가 된다. 음수인 경우도 생각해서 소수점을 이하 수를 없애고 싶을때는 Math.trunc()를 사용하는 것이 좋다.

  • 코드 예시 : Math.trunc()

function solution(num1, num2) {
    return Math.trunc(num1 / num2 * 1000);
}

  • 문제 2. 각도기

    각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

  • 내 코드 : 부등호는 하나씩 쓰기 주의

function solution(angle) {
    if (angle < 90) {
        return 1;
    } else if (angle === 90) {
        return 2;
    } else if (90 < angle && angle < 180) {
        return 3;
    } else if (angle === 180) {
        return 4;
    }
}
  • 기타 아이디어
    • switch문
    • 삼항연산자

  • 문제 3.짝수의 합

    정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
    제한사항
    0 < n ≤ 1000

  • 로직 생각해보기

    • 로직의 문제점 : n이 100만이라면? 배열 만들고 forEach로 다 도는데 오랜 시간이 걸릴 것
  • 아이디어

    1. reduce : 자동으로 forEach 함
    • 콜백함수의 매개변수에 하나씩 들어옴
    • 근데 배열이 아니라 정수값 n이 주어지기 때문에 적합하지 않음
    1. for문 (변수 초기값, 반복 조건문, 반복 후 변화줄 코드)
      +2로 하면 짝수 고를 수 있음
    • ex1) 2부터 / 조건에 n이하 적기 / i += 2

    • ex2) 초기값 n / 조건에 2이상 /

    • 짝수의 합 : for 문 안에서 더해주면 됨
      (외부 변수 선언, +=로 합치기)

    1. n(n+1)/2 : 수학공식 이용하면 한 줄로 끝남
  • 풀이 : for문으로 해결하기

function solution(n) {
    let answer = 0;
    for (i = 1; i <= n; i++) {
        if (i % 2 === 0) {
            answer += i
        }
    } return answer;
}

  • 문제 4. 배열의 평균값

    정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
    제한사항
    0 ≤ numbers의 원소 ≤ 1,000
    1 ≤ numbers의 길이 ≤ 100
    정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

  • 풀이 : reduce 사용

function solution(numbers) {
    let result = numbers.reduce(function(arr, cur, idx, src) {
        return arr + cur
    }, 0)
    
    let result2 = result / numbers.length;
    return result2;
}
  • reduce 함수
    (참고 : 친절한 코드)
    • 배열의 각 요소를 돌면서 콜백함수를 실행함
    • 배열 요소를 모두 더한 값을 출력함
    • (사용 예시)
let result = arr.reduce(function(arr, cur, idx, src) {
	return arr + cur;
}, 0)
  • reduce 함수가 받는 요소
    • arr : 누적값
    • cur : 현재값
    • idx : 인덱스
    • src : 원본 배열
    • return arr + cur를 각 요소마다 돌면서 반복 후 마지막엔 누적값 반환
    • 0 : 누적값의 초기값 (설정하지 않으면 index 0번째 배열요소로 자동 설정됨)

📎 git 2차 특강 정리

브랜치 생성, 이동 관련 명령어

1. 로컬, 원격 브랜치 생성

  • 로컬 브랜치 만드는 명령어
    git branch 브랜치이름

    -> 원격에도 브랜치 추가하기
    git push origin 브랜치이름

    -> 로컬/ 원격에 각각 존재하고 있는 새로 만든 브랜치를 연동시켜주기
    git branch - -set-upstream-to origin/브랜치이름

2. 로컬에서 브랜치 이동 명령어

git switch 브랜치이름 (추천 - 최신버전 명령어)
git checkout 브랜치이름 (얘는 다른 기능도 더 있음)

3. 브랜치를 한번에 생성 & 이동 (파일도 복사된다는 뜻)

git switch -c 브랜치이름 (create)
git checkout -b 브랜치이름 (branch)
(둘 다 같은 동작)



합치기(merge, Pull Request)

  • 다른 브랜치에서 수정한거 왜 main에 합쳐야?
    - 협업할때 최종 브랜치에 합쳐야 하니까

1. 브랜치 합치는 명령어

git switch 최종브랜치이름(main으로 이동 먼저 하기)
git merge 합칠브랜치이름(login 브랜치를 main에 합치기)
-> 사실 터미널에서 merge로 합치는 방법은 잘 안씀

2. Pull Request (PR) - 추천

  • Pull Request는 왜 하는걸까?
    -> 코드리뷰 및 병합하기 위해서
  • Pull : 당겨서 합치는것 (merge)
  • Request : 요청하다 (합쳐도 되나요?)

1) Pull Request 방법

  • github에서 Pull Request 들어가서
    (base: dev) <- (compare : 내 기능브랜치)

  • PR 메시지 적고 merge 신청
    (Add Rull 에서 -> 승인해야 merge할지 바로 merge 정할수 있음)

-> 로컬에서 git pull origin main 하면 로컬까지 최종 반영!

  • merge 전으로 돌아가기 (시범만 보여주심)
    git log
    git reset - - hard 어쩌구


협업 실전 가이드

1. 🚨 pull request, github merge 문제점

  • main branch === 배포용
    (main에 합치면 자동으로 배포되는 자동화도 있음 ㄷㄷ)
    -> 실 사용자가 바로 사용가능

문제1) 완벽 기능 개발해야 merge 가능

  • 코드를 작은 단위로 commit 해야되는데,..
    합치는건 한방에…?
    충돌 많음, 다만드는데 오래걸림, 버그 수정 오래걸림

해결책1) 개발용 브랜치 하나더 만들기

(dev - develop 브랜치)
ex)
main 배포용
기능브랜치 기능 개발용
dev 테스트용


문제점 2) 그냥 합치면 오류 발생 확률 높음

ex) 변수 이름이 같을때
각 브랜치 파일에서는 오류 x
dev 머지 하니까 오류 0

해결책 2) 로컬에서 먼저 합쳐보는 테스트

무작정 dev에 올려서 합치지 말고,
내 컴퓨터에 일단 git pull origin dev 해서 확인 후 올려서 합치기

충돌 시 해결도 이렇게 해결


실전 가이드

1. 초기 세팅

  • 로컬에 폴더 생성
  • 초기 코드 작성
  • git init, add, commit
  • repository 생성
  • git push 업로드

2. 팀장 : dev(혹은 develop) 브랜치 생성

  • git switch -c dev
  • git push origin dev(github에도 반영)

3. 팀장 : github에서 dev 브랜치를 default설정
(dev 브랜치꺼 clone 하니까 등의 이유)

4. 팀장 : 팀원들을 collaborator로 등록

5. 팀원 : git clone repository주소 .

  • .빼면 폴더가 통째로 다시 생성됨
  • clone or pull

6. 팀원 : 내 기능브랜치 생성


기능 개발

  1. 브랜치 생성, 기능개발
  2. git add /commit /push
  3. pull request 생성 > github에서 pr 진행
    (충돌나면 merge버튼 활성화 안됨)
    (base: dev) <- (compare : 내 기능브랜치)

참고) git fetch origin(원격의 브랜치들 가져오기)

  1. 코드 리뷰
  • pr 우측에 review 인원추가해서 코드리뷰
  • 코드리뷰 방법
    files changed 클릭
    -> 변경된 코드 커서 올리면 + 뜸
    -> 메시지 남기기
    -> start
    -> finish review
    -> 코멘트(일반 피드백), 승인(머지 승인), request changes(변경해주세요)
    -> submit review
  1. 합치기 전 내 로컬에서 충돌 해결 및 테스트

  2. merge 하기

<추가 기능 개발>

  1. 내 로컬의 dev에도 변경사항 반영
    git checkout dev
    git pull origin dev

  2. 다음 기능 개발

참고)
로컬 브랜치 삭제
git branch -d 로컬브랜치이름

원격 브랜치 삭제
git push 원격저장소이름 -d 원격브랜치이름
(원격저장소이름 대부분 origin)

브랜치 목록 확인(로컬, 원격 전부)
git branch -a

원격 브랜치 목록 확인
git branch -r

(참고 : 모딩의 코딩블로그)



🐣 오늘의 느낀점

캠프 시작하기 전처럼 그냥 혼자 공부했다면 이렇게까지 공부하지 못했을거란 생각에 아주 아찔해진다. 내배캠을 시작한지 아직 그렇게까지 긴 시간이 지난것도 아닌데 벌써 영겁의 시간같고... 😂 ㅋㅋ 근데 정말 짧지만 굵게 배우고 있는것 같아 나름 다행스럽기도 하고 힘들기도 하다.
혼자 했다면 매일 이렇게 알고리즘 공부도 하지 않았을테고, 아니 알고리즘이 뭔지 알기는 했으려나... 프로그래머스 사이트 한번이라도 들어가는 봤으려나... 그리고 프로젝트도 혼자서만 간단히 만들어볼때는 진짜 그냥 html, css의 향연이었는데 캠프 하면서 js 공부도 하고 팀프로젝트도 해보고 바닐라 js 쓰려고 노력도 해보면서 실력이 많이 늘려고 움찔움찔 하는 것 같다. 이럴때 바짝 더 해서 레벨을 확 높여야겠다. 화이팅!!

profile
무서운 속도로 흡수하는 스폰지 개발자 🧽

0개의 댓글