algorithm-study icon indicating copy to clipboard operation
algorithm-study copied to clipboard

:orange_book: Algorithm study

:orange_book: algorithm-study

알고리즘 문제 사이트

프로그래머스 https://programmers.co.kr/learn/challenges
백준 https://www.acmicpc.net/problem/tags
CodeUp https://codeup.kr/
Codility https://app.codility.com/programmers/
온코더 https://www.oncoder.com/
구름 https://codingtest.goorm.io/

알고리즘 공부 간증글

박트리님 PS공부법 https://baactree.tistory.com/52
언어선택 https://www.acmicpc.net/board/view/24568

알고리즘 공부 방법

먼저 본인에게 부족한 스킬이 무엇인지 파악하기

  • 구현력

    • 본인이 생각한 알고리즘을 그대로 소스코드로 구현하는 능력
    • 프로그램 순서도, 사용할 변수나 함수의 데이터 타입 등을 올바르게 정하는 과정
    • 이 스킬을 향상시키려면 어떤 프로그램을 만들고자 하는지를 명확히 해야한다
    • 무엇을 입력받아 어디에 저장하고 어떤 과정을 거쳐 중간 결과로 무엇을 얻고 최종적으로 어떤 결과물을 출력하는지 순서도를 적은 후 데이터 타입 또는 자료구조에 저장할지 생각하는 연습을 하자.
  • 문제해결능력

    • 알고있는 알고리즘, 자료구조, 테크닉을 당면한 문제에 맞게 변형 적용하는 것
    • 문제를 창의적인 시각에서 접근해 해결하는 능력이 필요
    • 중위권에서 상위권으로 갈 때 발목잡는 스킬
    • 이 능력이 부족하면 어떻게 접근해야 할지, 막상 솔루션은 내가 아는 알고리즘,자료구조 인 상황이 연출된다
    • 이 스킬을 향상시키려면 양질의 문제를 풀기, 이전에 본인이 접근한 다양한 방법을 잘 정리 해두는 것이 좋다
  • 배경지식

    • 기초적인 프로그래밍 문법, 알고리즘, 자료구조, 선형대수나 확률 등 기본적인 수학적 지식 (가끔 하드웨어, OS 지식)
    • 이 능력이 부족하면 솔루션을 열었을때 외계어를 마주하게 된다.
  • 정해진 시간내에 문제풀때 문제 이해시간/풀이 생각시간/코딩시간/디버깅시간을 기록하며 어떤 부분이 구체적으로 부족한지 인지해서 부족한 부분에 더 노력을 들이기로

알고리즘 스킬을 늘리기위한 공부 순서

  1. 알고리즘 관련 이론을 공부해 이해한다.
  • 자신이 이해할 수 있는 방식으로 이론을 정리하자.
  • 블로그나 깃허브에 정리하는것도 하나의 방법이 될 수 있다.
    • 참고 https://github.com/TheCopiens/algorithm-study/blob/master/contents/200121_hashing.md#hashing
    • https://github.com/WeareSoft/algorithm-study/blob/master/contents/180527.md
    • https://gmlwjd9405.github.io/2018/05/06/algorithm-bubble-sort.html
  1. 이론과 관련된 알고리즘 문제를 푼다.
  • ex) 해쉬를 이용하는 문제, 배열을 이용하는 문제
  • 문제의 레벨이나 자신의 눈높이에 맞추어 적당한 시간을 정해놓고 푼다.
  • 난이도에 따라 60분~120분이 적당하다. (2시간 이상 넘기지 않는다)
  • 시간을 점점 단축시키는 방향으로 공부해야 실전에 대비할 수 있다.
  1. 이해하기 어려운 문제는 질문하거나 풀이를 본다.
  • 주어진 문제를 풀다가 어디에서 막혔는지 혹은 자신이 무엇을 모르고 있는지 명확히 알아야 해법이 가능하다.
  • 관련된 이론 참고하기, 정답 소스 보기, 다른 사람들 풀이 보기
  • 이해하기 힘든건 주위 사람들 혹은 깃허브에 issue를 등록하거나 pull request를 날려서 질문하자
  • 쉬운것같은 문제도 괜찮으니 망설이지 말고 질문하자. 지혜를 모으면 더 좋은 솔루션을 발견.
  1. 알고리즘을 이해하고 다시 푼다.
  • 피드백을 적용해서 코드를 수정한다.
  • 상대방에게 받은 피드백과 코드에 자신이 적용한 해결방법을 정리해서 README.md에 작성하고 source/해당 코드가 있는 폴더에 업로드한다.
  • 코드에 주석을 달면 시간이 지나고 다시 볼 때 빠른 이해에 도움이 된다.

* 반드시 지키는것 보단 자신에게 맞는 공부법을 찾아가자

팀원 스터디 진행 방법

온라인 스터디

  1. 월요일마다 팀 공통문제 출제

    • ex) 구현력 문제 + DP 문제
  2. 시간 정해두고 문제풀기

    • 시험 실전대비를 위해 시간을 정해두고 푸는것을 권장 (최대2시간)
  3. 문제풀이 마크다운 작성후 업로드하기. (개인폴더에 작업후 master branch에 merge)

  4. 주말에 온라인 피드백 진행. 약 2시간이 소요됩니다.

  5. 모든 질문은 slack, issue, pull request 등 자유롭게 진행됩니다.

오프라인 스터디

  1. 주 1회 스터디룸이나 카페에서 만나 약 2~3시간 진행한다.
  2. 팀원들에게 자신이 공부한 이론이나 직접 푼 문제를 설명한다.
    • 이때 팀원들의 도움 혹은 피드백이 필요하다면 정리해서 미리 issue 혹은 Pull Request를 날린 후 단톡에 언급
    • 팀원들은 반드시 미팅 전까지 질문 내용과 답변 숙지하기.
  3. 미팅이 끝나고 각자 위의 4번, 알고리즘을 이해하고 다시 푼다 를 진행한다.

Git 저장소 이용하는 방법

  • 저장소 : https://github.com/TheCopiens/algorithm-study

폴더 설명

  • contents: 공동폴더. 알고리즘 관련 이론을 정리해서 업로드하는 폴더
  • docs: 공동폴더. 이론 이외의 문서를 업로드하는 폴더
  • source: 개인 폴더. 필요한 개인폴더를 생성하고 알고리즘 풀이를 업로드하는 폴더

GitBash 명령어 사용 방법

원격저장소 로컬에 가져오기

git clone https://github.com/TheCopiens/algorithm-study.git

로컬에서 개인 브랜치 생성하기

local workspace에 'ohhako'라는 이름으로 브랜치 생성
git branch ohhako

로컬에서 브랜치 작업후 원격저장소에 반영하기

로컬 브랜치가 있는 폴더에서 개인작업을 마친 후 공동 저장소에 반영한다.

  1. git checkout ohhako - master에서 ohhako 브랜치로 전환
  2. workspace에서 작업
  3. git commit -m "message"
  4. git push origin ohhako - 원격저장소 ohhako 브랜치에 반영
  5. git checkout master - 브랜치 전환
  6. git pull - 원격저장소 master의 최신 정보를 로컬에 업데이트 시키기
  7. git merge ohhako - master에 ohhako 브랜치 작업 반영
  8. git push origin master - 원격저장소 master에 반영



이 글은 아래 사이트를 참고해 작성되었습니다.