Skip to content

WCDI-DGHG/algo-study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

534 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

👶 알고리즘 스터디 👶




💡 참고해주세요 💡

  • 😈 표시는 아직 팀원들 간 세부적인 협의가 더 필요한 부분이랍니다.
  • 👽 표시는 조금 더 구체화가 필요한 부분이랍니다.

🏃‍ 참가인원 🏃‍

  • 국혜경 (Hyekyung_Guk)
  • 김고운 (GounKim)
  • 박동석 (pds0309)

🔥 목 표 🔥

  • 👽 최소 프로그래머스 2단계 통과 (다양한 알고리즘 문제들을 이해하고 알맞은 방법으로 접근할 수 있는 수준)

📆 진행방법 📆

Daily Study

  • 한 주동안 풀이할 알고리즘 문제 들이 정해지고 주차 별 issue 에 올라오면 요일 수업전까지 자유롭게 풀이하여 올린다.

  • 토요일 전까지 팀원들은 다른 사람이 PR(Pull Request) 한 문제 풀이 코드를 확인한다.

    • 반드시 팀원들 중 한 명 이상이 Review 해야 master 브랜치에 Merge 될 수 있다.
    • 개선 사항, 오류를 발견하면 자유롭게 코멘트와 함께 리뷰하도록 한다.
  • 풀지 못한 문제, 풀었지만 풀이과정에 도움이 필요한 문제가 있다면 주차 별 issue 에 댓글을 남긴다.

  • 풀면서 공부하게 된 Tip 또는 알고리즘 지식 등은 자유롭게 PR 하여 공유하도록 한다.

  • issuePR 이 올라오는 부분은 가능하다면 slack 채널과 연동해 알림을 주도록 설정할 예정

  • 기타 질문, 제안, 공유 등은 slack 채널을 자유롭게 활용한다.


Weekly Study

  • 매 주 토요일 화상 스터디를 2시에 진행하며 반드시 1시간 이상 진행한다.

  • 👽 주차 별 issue의 댓글 에 올라온 문제에 대해 다룬다.

  • 풀었던 문제들에 대해서 자유롭게 대화를 나누고 질의 및 응답하는 시간을 가진다.

  • 이번 주 문제를 풀면서 추가적으로 공부했거나 공부가 필요하다고 느꼈던 배경지식 (문법 , 알고리즘, 자료구조, 수학적 지식 등) 들에 대해 대화한다.

  • 다음 주까지 학습해오고 싶은 배경지식 에 대해 논의하고 선정한다.

  • 다음 주까지 풀고 싶은 알고리즘 문제, 풀어야만 할 것 같은 알고리즘 문제를 선정한다.


🙆‍♀️ Rule 🙆‍♀️

  • 😈 문제를 풀지 못했을 경우 시도한 부분까지는 올리고 다음 주간 스터디 전까지 다시 꼭 풀어서 제출 하도록 한다.

  • Commit 규칙 반드시 지킨다.!

👍 Recommend 👍

  • 풀이 시 시간을 체크해본다.

    • 생각하는데 얼마나 걸렸는가? , 생각을 코드로 구현하는데 얼마나 걸렸는가? 등
  • 어려우면 솔루션을 찾아보자.

    • 나는 어떻게 시도 했고 솔루션은 어떻게 했는지를 주간 스터디에서 발표를 해보는게 어떨까?

✏️ File Naming Rule ✏️

  • 프로그래머스 문제

    • 주차_이름의_띄어쓰기는_언더바로_이니셜.java
      • EX) w1_주차_소수_찾기_PDS.java
  • 백준 문제

    • 주차_문제번호_문제이름_이니셜.java
      • EX) w3_2577_숫자의_개수_PDS.java
  • 기타 문제

    • 추가로 풀게 될 시 협의
  • 팁 or 알고리즘 지식

    • 자유롭게 명명하고 파일형태도 자유(hwp 제외)

📁 Directory Structure 📁

  • 예상 파일 구조로 내부 파일은 예시이다.

  • 백준은 단계별 문제 테마를 디렉터리로, 프로그래머스는 레벨, 고득점 kit 테마를 디렉터리로 한다.

├── algorithm
│   ├── 힙.md
│   └── 스택과큐에대해알아보자.txt
├── tip
│   ├── 자바입출력.txt
│   └── 이런게좋다더라.pdf
├── programmers
│   ├── lv1
│   ├── lv2
│   └── lv3
├── baekjoon
│   ├── 입출력과_사칙연산
│   ├── for문
│   ├── 재귀
│   └── 브루트_포스

📝 Git 저장소 이용하기 📝

내 문제풀이 올리는 방법

  • 우리가 사용할 이 저장소에 branchmaster를 제외하고 인원 수 만큼 두게 될 것입니다.

  • 먼저 해당 저장소를 자신의 로컬 컴퓨터 원하는 경로에 clone 합니다.

  • 그다음 로컬에서 자신의 branch 가 없다면 만들고 있다면 선택한 뒤 변경사항을 추가한 다음 commit & push 합니다.

  • 우리가 공통적으로 사용하는 이 저장소에 와서 master 브랜치에 Pull Request 를 합니다.

  • commit 은 반드시 한 문제 단위로 합니다. 한번 Pull Request 해두면 push 할 때 마다 Pull Request 에 커밋 이력이 쌓일 것입니다.


Commit 메시지 이름 규칙

  • 문제 풀고 처음 올릴 때

    • 설명은 .txt 또는 .md 형식으로 올리고 싶으면 코드와 함께 커밋해서 자유롭게 올리기

    • add [코딩사이트] 문제 이름 / 이름

      • EX) add [프로그래머스] 전화번호 목록 / 박동석
      • EX) add [백준] 아스키 코드 / 박동석
  • 아차차! 푼 문제를 수정하고 싶어요

    • PRMerge 되지 않았을 경우 commit & push 하면 알아서 PR 에 등록됩니다.
    • fix [코딩사이트] 문제 이름 / 이름 / 변경내역 간단 요약
      • EX) fix [백준] 아스키 코드 / 박동석 / 변수명 변경
  • 팁 or 알고리즘 이론 등 기타파일 올리거나 수정할 때

    • 올릴 때 수정할 때 add , fix 붙여주는 것 동일
    • `add 파일제목 / 이름
      • EX) add BFS란? / 박동석
      • EX) fix BFS란? / 박동석 / 일부 내용 수정

Pull Request 이름 규칙

  • [1주차] 이름


😃 [Git 간단설명 및 설치 , 환경설정]

깃이란?

로컬 에서 관리되는 버전 관리 시스템이다.

깃허브란?

클라우드 방식 으로 관리되는 버전 관리 시스템이다.


우리는 앞으로의 스터디를 깃허브 에서 관리될 지금의 이 원격 저장소를

자신의 로컬 컴퓨터 환경으로 가져와서 자신의 변경 사항(문제 풀이 추가)을 반영한 뒤

원격 저장소에 자신의 변경내용에 대한 반영을 요청 하는 방법으로 진행하게 될 것입니다.


설치하기

로컬에서 이 원격 저장소를 불러와 사용하기 위해 링크 에서 Git 을 먼저 설치합니다.

  • 3시방향 Download for Windows 버튼을 누르면 알아서 다운로드 됩니다.

  • 아무 변경사항 없이 Next 를 눌러 설치해줍니다. 설치에 성공하면 git bash가 설치되어있을 것입니다.

git bash 에 들어가서 다음과 같이 입력했을 때 버전 정보가 나오는지 확인합니다.

$ git version

환경설정

먼저 git 사용자를 등록해주어야 합니다.

$ git config --global user.name "yourgithubname" 

$ git config --global user.email "yourgithub@email"

한글깨짐 고치기

$ git config --global core.quotepath false

다음과 같은 명령어로 변경을 확인합니다.

$ git config --list

feafeafafeaf




😃 [간단 용어 정리]

원격 저장소(Remote Repository)

  • 우리가 지금 보고 있는 이 Github 상의 저장소를 말합니다.

로컬 저장소(Local Repository)

  • 내 PC에 파일이 저장되어 있는 개인 저장소를 말합니다.

git clone

  • 원격 저장소를 복제 해 내 로컬 저장소로 가져오는 것을 말합니다.

git commit

  • 파일 또는 폴더에 대해 의미 있는 한 단위의 변화를 완료했음을 기록하는 행위입니다.

git push

  • 원격저장소commit 내역들(변경 내역)을 업로드하는 행위입니다.
  • 나의 로컬 저장소에서 작업 후 commit & push 하게 되면 나의 변경 이력이 모두가 공유하는 이 원격 저장소에 반영되는 것입니다.

branch

  • 이 공유 원격저장소에 존재하는 나만의 작업공간 이라고 우선 알아둡시다.
  • 로컬 저장소에서 내 이름의 브랜치를 만들고 거기서 작업 한 뒤 push 도 원격 저장소의 내 이름으로 된 브랜치에 하게 될 것입니다.

Pull Request(PR)

  • 그렇다면 내 작업물들이 포함된 내 이름으로 된 브랜치 가 4개가 있겠네요! 우린 4명이거든요

  • 각 브랜치에는 자기 자신의 코드만 있을 겁니다.

  • 하지만 우리의 원격 저장소에는 하나의 브랜치가 더 존재합니다. 바로 master 브랜치이죠

  • 자기 자신의 브랜치와는 다르게 master 브랜치에는 우리 모두의 문제 풀이가 들어있을 예정입니다.

  • 그러기 위해 필요한 과정이 pull request입니다.

  • 내가 내 브랜치에서 내 문제를 모두 풀었으니 팀원 분들이 검토해주시고 문제 없으면 master 브랜치로 합쳐 주세요!

라고 요청을 한다고 생각하면 됩니다.

merge

  • PR 했던 나의 브랜치의 변경 내역들이 master 브랜치로 합쳐지는 것을 의미합니다.

스터디에 필요한 용어는 언제든지 추가될 수 있습니다.

용어 추가나 잘못된 내용 수정은 새 브랜치 만들어서 언제든지 PR 하세요!




😃 [제 코드를 올리고 싶어요!]

먼저 앞으로 Git Bash 에서 활용할 리눅스 명령어 2개에 대해서 간단하게 알아봅시다.

$ ls : 현재 디렉터리의 모든 파일과 폴더 목록을 보여줍니다.
$ cd .. : 현재 디렉터리 기준 바로 이전 디렉터리로 이동합니다.
$ cd /경로/경로 : /경로/경로 디렉터리로 이동합니다.

Git Clone 하기

  1. 원격 저장소 주소를 복사합니다.

git1

  1. Git bash 를 실행시키고 원하는 디렉토리로 이동합니다. 저는 C드라이브의 algostudy 폴더로 하겠습니다.
$ cd /c/algostudy/
  1. git clone 명령어를 통해 원격 저장소 로부터 로컬 저장소 를 생성합니다.
$ git clone https://github.com/WCDI-DGHG/algo-study.git	

이런식으로 메시지가 나올겁니다.

Cloning into 'algo-study'...
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 9 (delta 1), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (9/9), 6.09 KiB | 692.00 KiB/s, done.
Resolving deltas: 100% (1/1), done.

ls 명령어로 algo-study 폴더가 생성되었음을 확인합니다.

git3

cd 명령어로 로컬 저장소algostudy 폴더로 이동해봅시다.

git4

위 사진처럼 (master) 라는 것이 보이시나요? 이게 branch 입니다.

현재 로컬저장소에서 master 브랜치하에 있다는 소리입니다.

위에서 각자 자신의 브랜치를 만들어 풀이를 올린다고 했었습니다.

자신만의 브랜치를 만들고 그 브랜치로 이동해봅시다.

브랜치 생성 - 이니셜로 합시다.

$ git branch pds

브랜치 확인 - 방금 만든 브랜치가 나오면 성공

$ git branch	

브랜치 이동 - 내 브랜치로 이동해줍니다.

$ git checkout pds

git5

이번에 풀었던 프로그래머스 짝수와 홀수 문제를 예시로 올려보겠습니다.

디렉터리 구조 규칙에 따라 /programmers/lv1 폴더에 문제를 올릴 것입니다.

git6

다시 Git Bash 로 돌아와서 git status 명령어를 쳐줍시다

$ git status	

git7

뭔가 추가되었다는 것을 보여줍니다.

지금은 programmers 라는 폴더 자체도 처음 만들기 때문에 저런식으로 나오지만 앞으로는 내가 추가하고 수정한 파일들에 대해서 잘 보여줄 것입니다.

이미지 밑부분을 보면 git add 를 하라고 되어있습니다. git add 를 해봅시다

우리가 커밋할 파일을 추가해주는 작업입니다.

경로를 하나하나 입력할 필요는 없습니다 Tab 키를 잘 활용해보세요

git add programmers/lv1/짝수와_홀수_PDS.java.java

위와 같이 add 할 파일을 직접 지정해줄 수도 있고 git add . 으로 변경사항이 있는 모든 파일을 추가할 수도 있습니다.

git status 명령어를 다시 한번 사용해볼까요?

git8

커밋될 파일이 준비가 된 것입니다.

git commit 명령어로 커밋해줍니다.

git commit -m "커밋 메시지"

$ git commit -m "add [프로그래머스] 짝수와 홀수 / 박동석"

git push 명령어로 원격 저장소에 업로드 해줍니다.

git push 원격저장소(origin) 브랜치

$ git push origin pds	

git9

최초로 pds 브랜치를 만들고 push했기 떄문에 원격저장소에 pds 브랜치가 생성되었다는 것을 확인할 수 있습니다.

원격저장소로 와보면 pds 브랜치가 생성되어있음을 확인할 수 있습니다.

git10

이제 우리는 문제풀이를 추가한 내역을 Pull Request 를 통해 master 브랜치에 merge 요청을 하면 됩니다.




😃 [제 코드를 올리고 싶어요! - 코드 요약본]

위의 과정을 통해 clone 하고 branch 생성에 성공했다면 앞으로는 이 부분만 참고해서 코드를 올리면 될 것 같습니다.

  1. Gitbash 의 원격저장소에 와서 내 브랜치로 되어있는지 확인한다.
$ git checkout 브랜치이름
  1. 코드를 적절한 디렉토리에 추가/수정한다.

  2. git add 명령어 수행

$ git add .
  1. git commit -m "메시지" 로 변경 commit!
$ git commit -m "add [프로그래머스] 문제 이름 / 내이름"	
  1. git push 명령어를 통해 원격 저장소에 업로드
$ git push origin 브랜치이름	



😃 [Pull Request 하기]

commit & push 하여 원격저장소 나의 브랜치에 문제풀이를 올렸다면

master 브랜치에 병합 요청을 해보겠습니다.

왜 하나요?

  • Pull request 내역을 통해 문제풀이를 팀원들과 공유하여 코드리뷰를 하기 위해

  • 내 브랜치에는 내 코드만, matser 브랜치에는 우리 모두의 코드를 한눈에 보기 위해

저장소의 Pull Request 항목으로 와서 빨간박스 둘 중 하나 아무거나 클릭해줍니다.

git11

밑으로 내리다 보면 다음과 같이 변경 내역을 모두 확인할 수 있습니다.

git13

어디에서 어디로 Pull Request 하는지 잘 확인하고 해줍니다.

git12

Pull Request 끝! 쉽죠? 그나저나 커밋 메시지 규칙이랑 풀리퀘스트 이름 규칙 틀렸네요

Pull Request 는 한 주간 한 번 하시면 됩니다. 커밋 푸쉬한 내 코드들은 알아서 여기 쌓일 것입니다.




😃 [ETC]

커밋을 잘못했어요 고치고 싶어요!

코드 복붙 실수나 메시지를 잘못작성했거나 이미 커밋했는데 뭘 더 추가하고 싶거나 수 있습니다.

git commit -amend 명령어 사용하기

변경이 있다면 git add 를 해주고

커밋 명령어에 -amend 를 붙여주면 바로 이전 커밋을 덮어써주게 됩니다.

이미 예전에 올린 부분인데 다시 수정하고 싶어요!

상관없습니다 커밋 규칙에 맞게 commit push 하시면 Pull Request에 변경이력과 함께 쌓입니다.




😃 [주간 스터디 후 꼭 해야 할 것!!!!!!!]

우리는 주간 스터디 후 각자 PR(Pull Request) 한 코드들을 master 브랜치에 합칠 것입니다.

그렇다면 우리가 원격 저장소로부터 clone 해서 만들었던 로컬 저장소는?

알아서 업데이트될까요?? 아닙니다.

따라서 주간 스터디 후 첫 문제 풀고 commit 하기 전에 다음과정을 꼭 진행해주셔야 됩니다


master 브랜치로 작업공간을 옮긴다.

$ git checkout master

원격 저장소의 master 브랜치 내용으로 내 master 브랜치의 내용물들을 업데이트한다.

$ git fetch
$ git pull origin master

이렇게 하면 로컬에서도 내 브랜치로는 내 코드들을 보고 , 작업하고

마스터 브랜치로 작업공간을 옮기면 스터디원들의 코드도 모두 볼 수 있게 됩니다.

단 마스터 브랜치로 직접 작업하시면 안됩니다.



About

알고리즘 스터디 📓

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors