2024년 2월 28일에 시작된 알고리즘 스터디 3기
- 없음
- 14주차에 테스트 문제 추가해놨습니다. 푸는건 자유입니다.
- 다음주 스터디 없습니다.
- 문제는 업로드하겠습니다.
-
Zoom 관련 안내
-
회의 URL
-
회의 ID: 811 5728 1674
-
암호: 123456
-
-
매주 회의가 끝나면 각 주차에 해당하는 폴더가 만들어집니다.
-
회의가 끝나면 지난 주차 자신의 PR을 merge 합시다.
-
지나간 주차의 파일들은 월별로 묶어서 정리됩니다.
-
만들어진 폴더 안에 자신의 이름 폴더를 만들고 그 안에 해당 주차에 공부한 것들을 정리해서 올립시다.
-
각 파일 제목은 무엇에 관한 파일인지 알아볼 수 있게 올립시다.
-
매 주 개인 branch 생성을 생활화합시다.
-
꼭 문제에 대한 답안 코드가 아니더라도, 공부했던 개념을 정리한 markdown이나 txt를 올려도 무방합니다.
-
README.MD 파일은 최대한 자세하게, 쓸데없는 소리까지 다 적었으면 좋겠습니다. 우리 기억은 생각보다 휘발성이 강합니다.
-
지금은 의미없어 보이는 것이 나중에 기록이 되고 발자취가 됩니다.
-
매일 매일 일정하게 풀면서 commit으로 기록을 남기는 건 어떨까요? 힘들지만 좋은 습관을 들여봅시다.
- 시간 제한 : 코딩 테스트에선 평균적으로 문제 당 30분의 시간이 주어집니다. 1~2시간 치열하게 고민하여 푸는 것도 의미가 있겠지만, 결국 코딩테스트를 위한 공부라면 30분의 시간 제한을 두고 푸는 것을 추천합니다. 보통 늦어도 2분 내에 풀이에 대한 고민을 하고 나머지 28분 간 코드 작성과 오류 수정이 보통입니다.
- 잦은 시도 : 30분의 시간제한이 1문제에 30분 이상 투자하지 말라는 의미는 아닙니다. 30분이 지났을 때 완벽한 코드를 작성하지 못했다면, 틀린 문제입니다. 조금 더 시간이 있으면 풀 수 있을 것 같다면, 다시 30분을 설정하고 시도해봅시다. 2번째 30분 때도 풀지 못했거나, 풀 수 없을 것 같다면 구글링을 통해 다른 사람의 풀이를 보고 이해해야 합니다.
- 이해 : 이해란, 다른 사람의 글과 설명을 읽고 알겠다고 고개를 끄덕이는게 아닙니다. 정말 이해했다면, 다시 30분을 설정하고 문제를 혼자 풀어봅시다. 열 중 아홉은 풀지 못합니다. 한 번 읽고 이해할 문제였으면 애초에 안틀렸을 것이기 떄문입니다. 알고리즘 공부 중 풀이를 천천히 읽으며 체득하고, 혼자 30분 간 풀며 적용하는 것을 반복하는데 가장 많은 시간이 소요되야 합니다. 예를 들어, N-Queen 같이 어려운 문제의 경우 저는 10번 이상 이 과정을 반복했습니다(그리고 몇 주 전에 풀었을 때 또 틀렸습니다).
- 기록 : 첫 시도, 두번 쨰 시도, 답지를 보고 난 후의 첫 시도를 모두 기록하는 습관을 들이면 좋습니다. 30분이 지난 후 방금 30분 동안 내가 생각의 흐름이 어땠는지, 어디서 헷갈리거나 막혔는지, 어디서 실수가 일어난건지 파악할 수 있습니다. 내게 어떤 잘못된 습관이 있는지, 내가 어려움을 겪는 부분이 어딘지 파악하는 것은 중요합니다.
- 해설지 작성 : 자신이 완전히 이해했는지 파악하는 가장 쉬운 방법은 남에게 설명해보는 것입니다. 다른 사람에게 가르쳐주다보면, 스스로 막히는 부분이 발생하기 마련입니다. 블로그에 글을 작성하는 것은 그런 부분에서 많은 도움이 됩니다. 남들이 내 글을 보고 이해하도록 자세하게, 쉽게, 정확하게 표현하려는 노력은 정말 많은 공부가 됩니다.
4번과 5번의 예시로 제가 취준때 매일 작성했던 블로그 링크1, 블로그 링크2, 블로그 링크3, 블로그 링크4를 첨부합니다. 이 떄, 위 과정을 매일 3문제씩 하다보니 알고리즘에는 많이 자신감이 붙었습니다. 도움이 되길 바랍니다.
- 매주 공지된 프로그래머스 3문제(Lv1 1문제, Lv2 2문제)와 리트코드 1문제를 풀어온다.
- 문제는 최대한 이해하여 남에게 설명이 가능한 수준까지 학습 한다.
- 매주차 자신의 READMD.MD에 만들어 기록한다.
- 모르는 부분에 대해서도 명확한 질문이 가능하도록 준비하여야 한다.
- 스터디 모임은 매 주 수요일 오후 10시에 Zoom으로 진행한다.
- Pull Request는 모임 이후 merge한다.
- 매달 마지막 수요일은 1시간 동안 2문제를 테스트하고 풀이를 공유한.
- 시험 주차 숙제는 절반으로 줄인다.
- 숙제를 성실하게 해오지 못한 경우 결석으로 처리한다.
- 월요일까지 미리 통지되지 못하거나, 합당한 사유로 인정받지 못한 결석은 무단 결석으로 처리한다.
- 지각 3회, 결석 2회는 1회 무단 결석으로 간주한다.
- 4개월 내 무단 결석 3회는 강제퇴장 처리한다.
- 이번주 내용 받아오기
- 새로운 폴더에 받기(사실 받을 내용은 의미없는 README.MD 뿐이지만 폴더 만들어놨으니까..)
$ git clone https://github.com/junsoopooh/Studying_Algorithm.git $ cd Studying_Algorithm.git
- 이미 clone 해놓은 폴더에 이번주 추가하기.
$ cd Studying_Algorithm.git $ git checkout main $ git pull
- 제출할 공간 만들기
$ cd ${이번주차폴더}
$ mkdir ${내영어이름}
$ cd ${내영어이름}
$ git checkout -b ${이번주차폴더}/${내영어이름}
$ git push -u origin ${이번주차폴더}/${내영어이름}
3. push로 제출하기
내 local에서 올릴 파이썬파일과 Markdown등을 ${이번주차폴더}/${내영어이름}
$ git add . #git add . 은 현재 디렉토리 내에 모든 변경사항을 포함시킵니다.
#example.py라는 파일만 하고싶으면 git add example.py 라고 하면 됩니다.
$ git commit -m '하고싶은 말' # 날짜 어떤 문제 upload 의 형식 추천
$ git push #
4. 스터디 repository 이동
- branch 생성, push 확인하기
-
base:main <- compare:${이번주차폴더}/${내영어이름}
방향 확인하기
- Pull request 생성
- 수요일 회의가 끝나고 자신의 PR을 merge 한다.
$ git clone <repository URL> # 해당 URL의 repository clone하기
$ git branch # 해당 repo의 브랜 목록 보기
$ git branch -r # remote 브랜치 보기
$ git log --oneline # 내가 위치해 있는 branch 확인
$ git branch -d <브랜치이름> # 로컬 브랜치 삭제
$ git branch -dr <브랜치이름> # remote 브랜치 삭제
$ git fetch origin # 로컬에서 보는 remote 브랜치를 실제 원격 repository와 동기화
$ git branch <브랜치이름> # 브랜치 생성
$ git checkout <브랜치이름> # 작업하는 브랜치 변경
$ git checkout -b <브랜치이름> # 위 두가지를 한번에, 즉 브랜치를 만들고 그곳을 작업 브랜치로 하기
$ git push origin <브랜치이름> # 생성한 local 브랜치를 remote 브랜치에 붙여넣기
$ git branch --set-upstream-to origin/<브랜치 이름> # local 브랜치, remote 브랜치 연동하기
$ git remote update # remote 브랜치를 업데이트
$ git checkout -t origin/<remote에 있는 브랜치이름> # remote 브랜치를 로컬에 생성 후 해당 branch로 전환
$ git add . # 현재 디렉토리의 변경사항 모두 추적
$ git status # 추적상태 확인
$ git commit -m "하고싶은말" # 하고싶은말을 메시지로 같이 남김
$ git push # 원격저장소에 업로드
$ cd <디렉토리> #해당 디렉토리(자식)로 이동
$ cd .. #부모 디렉토리로 이동
$ ls # 디렉토리에 존재하는 파일 목록 출력
$ ll # ls에 -l 이라는 long option 추가로 상세히 출력
$ mkdir # 해당 이름의 하위 디렉토리 생성
mv 명령어 옵션
$ mv [-option] [파일이름] [디렉토리] #mv는 이동시키기
$ mv [파일이름] [변경할 파일 이름] #존재하는 디렉토리를 넣지 않으면 해당이름으로 파일이름을 변경함.
옵션 종류
-f : 디렉토리에 동일한 파일 이름 있어도 강제 이동
-i : 디렉토리에 동일한 파일 이름 있으면 물어봄
-u : 디렉토리에 있는 파일이 더 최신이면 이동하지 않음
rm 명령어 옵션
$ rm [-option] [파일이름] #rm은 삭제시키기
옵션 종류
-i : 삭제할지 여부 물어봄
-r : 하위 디렉토리까지 모두 삭제
git master(main)으로 내 local 덮어쓰기
$ git fetch -all
$ git reset --hard origin/master
master가 아닌 다른 branch로 덮어쓰기
$ git fetch -all
$ git reset --hard origin/<브랜치 이름>
현재 local을 다른 branch에 저장한 후, git pull로 덮어쓰기
$ git checkout master
$ git branch <브랜치 이름>
$ git fetch --all
$ git reset --hard origin/master
git config 설정 관련(git config 관련 오류가 나올 시 유용)
$ git config --list #전체 config 리스트 확인
#git config 설정하기(둘 다 해주어야 함)
$ git config --global user.name "홍길동"
$ git config --global user.email "id@email.com"
# git config 삭제하기
$ git config --unset user.name
$ git config --unset user.email
#삭제해도 남아있는 경우는 global 옵션 때문일 가능성이 있음. 이 경우 아래 방법으로 지울 수 있음
$ git config --unset --global user.name
$ git config --unset --global user.email