Skip to content

junsoopooh/Studying_Algorithm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

씹어먹는 알고리즘

2024년 2월 28일에 시작된 알고리즘 스터디 3기

멤버

임시탈퇴

일정

  • 없음

공지사항(2024.05.30)

  • 14주차에 테스트 문제 추가해놨습니다. 푸는건 자유입니다.
  • 다음주 스터디 없습니다.
  • 문제는 업로드하겠습니다.


안내사항

  • Zoom 관련 안내

    • 회의 URL

    • 회의 ID: 811 5728 1674

    • 암호: 123456

  • 매주 회의가 끝나면 각 주차에 해당하는 폴더가 만들어집니다.

  • 회의가 끝나면 지난 주차 자신의 PR을 merge 합시다.

  • 지나간 주차의 파일들은 월별로 묶어서 정리됩니다.

  • 만들어진 폴더 안에 자신의 이름 폴더를 만들고 그 안에 해당 주차에 공부한 것들을 정리해서 올립시다.

  • 각 파일 제목은 무엇에 관한 파일인지 알아볼 수 있게 올립시다.

  • 매 주 개인 branch 생성을 생활화합시다.

  • 꼭 문제에 대한 답안 코드가 아니더라도, 공부했던 개념을 정리한 markdown이나 txt를 올려도 무방합니다.

  • README.MD 파일은 최대한 자세하게, 쓸데없는 소리까지 다 적었으면 좋겠습니다. 우리 기억은 생각보다 휘발성이 강합니다.

  • 지금은 의미없어 보이는 것이 나중에 기록이 되고 발자취가 됩니다.

  • 매일 매일 일정하게 풀면서 commit으로 기록을 남기는 건 어떨까요? 힘들지만 좋은 습관을 들여봅시다.



알고리즘 공부를 위한 소소한 팁

  1. 시간 제한 : 코딩 테스트에선 평균적으로 문제 당 30분의 시간이 주어집니다. 1~2시간 치열하게 고민하여 푸는 것도 의미가 있겠지만, 결국 코딩테스트를 위한 공부라면 30분의 시간 제한을 두고 푸는 것을 추천합니다. 보통 늦어도 2분 내에 풀이에 대한 고민을 하고 나머지 28분 간 코드 작성과 오류 수정이 보통입니다.
  2. 잦은 시도 : 30분의 시간제한이 1문제에 30분 이상 투자하지 말라는 의미는 아닙니다. 30분이 지났을 때 완벽한 코드를 작성하지 못했다면, 틀린 문제입니다. 조금 더 시간이 있으면 풀 수 있을 것 같다면, 다시 30분을 설정하고 시도해봅시다. 2번째 30분 때도 풀지 못했거나, 풀 수 없을 것 같다면 구글링을 통해 다른 사람의 풀이를 보고 이해해야 합니다.
  3. 이해 : 이해란, 다른 사람의 글과 설명을 읽고 알겠다고 고개를 끄덕이는게 아닙니다. 정말 이해했다면, 다시 30분을 설정하고 문제를 혼자 풀어봅시다. 열 중 아홉은 풀지 못합니다. 한 번 읽고 이해할 문제였으면 애초에 안틀렸을 것이기 떄문입니다. 알고리즘 공부 중 풀이를 천천히 읽으며 체득하고, 혼자 30분 간 풀며 적용하는 것을 반복하는데 가장 많은 시간이 소요되야 합니다. 예를 들어, N-Queen 같이 어려운 문제의 경우 저는 10번 이상 이 과정을 반복했습니다(그리고 몇 주 전에 풀었을 때 또 틀렸습니다).
  4. 기록 : 첫 시도, 두번 쨰 시도, 답지를 보고 난 후의 첫 시도를 모두 기록하는 습관을 들이면 좋습니다. 30분이 지난 후 방금 30분 동안 내가 생각의 흐름이 어땠는지, 어디서 헷갈리거나 막혔는지, 어디서 실수가 일어난건지 파악할 수 있습니다. 내게 어떤 잘못된 습관이 있는지, 내가 어려움을 겪는 부분이 어딘지 파악하는 것은 중요합니다.
  5. 해설지 작성 : 자신이 완전히 이해했는지 파악하는 가장 쉬운 방법은 남에게 설명해보는 것입니다. 다른 사람에게 가르쳐주다보면, 스스로 막히는 부분이 발생하기 마련입니다. 블로그에 글을 작성하는 것은 그런 부분에서 많은 도움이 됩니다. 남들이 내 글을 보고 이해하도록 자세하게, 쉽게, 정확하게 표현하려는 노력은 정말 많은 공부가 됩니다.

4번과 5번의 예시로 제가 취준때 매일 작성했던 블로그 링크1, 블로그 링크2, 블로그 링크3, 블로그 링크4를 첨부합니다. 이 떄, 위 과정을 매일 3문제씩 하다보니 알고리즘에는 많이 자신감이 붙었습니다. 도움이 되길 바랍니다.






규칙


  1. 매주 공지된 프로그래머스 3문제(Lv1 1문제, Lv2 2문제)와 리트코드 1문제를 풀어온다.
  2. 문제는 최대한 이해하여 남에게 설명이 가능한 수준까지 학습 한다.
  3. 매주차 자신의 READMD.MD에 만들어 기록한다.
  4. 모르는 부분에 대해서도 명확한 질문이 가능하도록 준비하여야 한다.
  5. 스터디 모임은 매 주 수요일 오후 10시에 Zoom으로 진행한다.
  6. Pull Request는 모임 이후 merge한다.
  7. 매달 마지막 수요일은 1시간 동안 2문제를 테스트하고 풀이를 공유한.
  8. 시험 주차 숙제는 절반으로 줄인다.
  9. 숙제를 성실하게 해오지 못한 경우 결석으로 처리한다.
  10. 월요일까지 미리 통지되지 못하거나, 합당한 사유로 인정받지 못한 결석은 무단 결석으로 처리한다.
  11. 지각 3회, 결석 2회는 1회 무단 결석으로 간주한다.
  12. 4개월 내 무단 결석 3회는 강제퇴장 처리한다.



Terminal(Visual Studio CODE)로 제출하는 법


  1. 이번주 내용 받아오기
  • 새로운 폴더에 받기(사실 받을 내용은 의미없는 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


  1. 제출할 공간 만들기
$ 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 생성


  1. 수요일 회의가 끝나고 자신의 PR을 merge 한다.




git 명령어



$ 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

About

Made to remind python algorithm.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published