알고리즘을 공부하면서 겪는 시행 착오, 에러, 효율적인 방법 등을 기록하는 저장소
해당 저장소의 내용은 수시로 바뀝니다. 구조 등도 기록을 통해 변경하므로 일관성을 유지하지 않습니다.
👇 현재 진행 중인 알고리즘 스터디 👇
자바스크립트 알고리즘 스터디입니다. 의사 코드, 점화식 작성에 중점을 두고 있습니다.
👋 아직까지도 체계화 템플릿이 개발되지 않았습니다. 많은 시행착오를 겪고 있어요! 👋
- 현재 javasciprt, python은 작성되어 있다. .vscode 폴더 확인
- 현재 이 저장소는 Visual Studio Code를 중점적으로 사용하고 있습니다.
- javascript : jest
- python : pytest
- 언어별 디렉토리를 구성하는 하위 디렉토리 설명
- lib : 자주 사용하는 기능들을 모아놓은 폴더.
- problem : 알고리즘 문제와 풀이를 적는 곳(테스트 케이스를 많이 만들어서 반복 숙달).
- 완료 된 문제에 대해 Blog, Notion 등에 기록합니다.
- theory
java는 초기에 정리했던 structure, sorting algorithms이 분리되어 있습니다.
-
Java는 저장소 주인이 잠깐 손을 놨습니다.
-
현재 주력 알고리즘 풀이 언어입니다.
-
sub 알고리즘 풀이 언어입니다.
언어의 snippet을 설정하기 위함입니다. Visual Studio Code가 기준입니다.
구성은 아래와 같습니다.
- javascript : jst 입력 후 tab이나 자동완성을 누르면 테스트케이스와 기본 주석이 작성됩니다.
- python : pyt 입력 후 tab이나 자동완성을 누르면 테스트케이스와 기본 주석이 작성됩니다.
- tasks : 현재 활성화 된 파이썬 파일을 실행하는 단축키를 구성하는 파일입니다.
Ctrl + Shift + B
를 누르면 해당 파일을 실행합니다.
- tasks : 현재 활성화 된 파이썬 파일을 실행하는 단축키를 구성하는 파일입니다.
- markdown : 마크다운 정리를 위한 snippet 입니다. 개개인이 따로 작성합니다.
📖 workbook
- 종이든 모니터든 자신에게 맞는 형태를 찾아야 하며, 어떤 방법으로든 글을 써야 성장합니다.
- 100점이 목표가 아니라 100점을 맞을 수 있는 공부 방법을 찾는 것입니다.
- 지속적으로 훈수 받아라. 빠른 피드백을 통해 늦어도 2 ~ 3일 이내에 해결합니다.
- 기초를 이해하는 것은 어떤 것도 생략하지 않고 백지에 A to Z를 적었을 때 누가 읽어도 이해할 수 있는 것입니다.
- 어떤 문제가 있는지 파악하면서 신기한 문제나 새로 발견된 문제를 수집합니다.
- 카테고리별로 문제를 선별 합니다. 단, 바로 풀 수 있는 문제는 절대 넣지 않습니다.
- 예제 문제를 풀면서 다 맞았다고 착각하는 것과 똑같으며 안 되는 문제에 시간을 투자하는 것입니다.
- 딱 봤을 때 5초 안에 해법이 떠오르지 않는 문제 200여개를 선별한 뒤, 문제의 서술 방식이 비슷한 것끼리 분류합니다.
- 나만의 카테고리를 만들고, 하루에 카테고리별 문제를 번갈아가면서 풉니다.
- 풀다 보면 유형이 너무 비슷한 문제가 생기므로 200여개보다 적어질 수 있습니다. 그렇다면 문제를 보았을 때 머릿속에 해법이 떠오르면 문제를 지웁니다.
- 위와 같은 행위를 일일 단위로 시행하고, 주 단위로 회고하여 기록합니다.
- 문제 선별은 3주 내에 완료 되어야 하며, 전제는 알고리즘 기초가 숙달된 상태입니다. 기초라 함은 아래와 같습니다.
- 기본적인 자료구조(linked list, stack, queue, graph 등)
- 기본적인 알고리즘(sort, recursion, greedy 등)
- 모든 순서를 완료해야 나만의 200제 모의고사가 생기고, 이를 완벽하게 이해하고 있어야만 실제 테스트에서 50% 정도의 성적을 낼 수 있습니다.
- 이후, 다른 문제들을 풀어보면서 모의고사를 기반으로 변형된 내용을 이해하고 모의고사에 적용했던 유형을 분석하여 다시 정리하여야 10 ~ 20% 정도의 성적을 향상할 수 있습니다.
- 항상 개념노트의 작성은 꼼꼼하게 잘 챙겨주고, 제출이나 디버깅 전에 미리 테스트케이스를 짜보면서 진행하세요.
- 일련의 과정들이 무엇을 요망하는 것이냐면, [어떤 문제를 풀든 간에 익숙해야 한다!] 입니다.
- 아는 문제가 나와야 쉽게 접근하고 여러 방안을 대입할 수 있습니다. 즉, 어떤 카테고리에 어떤 방법을 적용해야 하는지 암기할 정도로 이해하고 있어야 합니다.
- 함정과 유효성을 항상 신경써야 하며 이를 테스트케이스로 발전 시킬 수 있어야 합니다.
- 분류한 문제는 이미지를 그대로 스캔하여 problem 디렉토리에 저장합니다.
- 동일한 이름으로 코드 파일을 만든다(.java, .spec.js, .py 등).
- 문제를 풀이한 해설이 아닌 pseudo code와 comment, testcase를 기록합니다.