알고리즘, 자료구조, 문제해결능력 향상 학습 계획



길지는 않지만, 부트캠프 과정을 마치고 2주 동안 웹 개발자가 되기 위해 회사에 서류를 제출하고 면접 또는 코딩테스트를 보고, 그 외의 시간에는 부족한 부분을 학습하며 긴장된 시간을 보냈습니다. 개발자를 평가할 수 있는 부분은 매우 다양한 것 같습니다. 태도, 문제해결능력, 커뮤니케이션, 학습 능력, 협업, 논리적 사고, 기술적 숙련도, 컴퓨터 공학적 지식, 수학 능력, 신념, 심미적 감각, 공감 능력 등 매우 다양하다고 느꼈습니다. 이 중 문제해결능력을 평가하기 위해 많은 회사에서 코딩 테스트를 실행하는데, 제한된 시간 안에 완료해야 하는 코딩 테스트는 항상 긴장되기 마련입니다.

저는 코딩 테스트가 어렵습니다. 익숙한 문제나 또는 일부 문제는 잘 풀 수 있는가하면, 많은 문제는 정말 어려워 풀 수가 없습니다. 또한, 풀었다 하더라도 성능적인 부분을 고려하면 제대로 풀지 못 한 경우도 많았습니다. 제가 잘하던 못하던 좋은 개발자가 되기 위해서는 이 부분을 필연적으로 향상시켜야 하지만, 단기간에 크게 향상 시킬수는 없다고 생각합니다. 그래서, 어떠한 방법으로 학습 및 연습해야 그나마 효율적으로 문제해결능력을 향상시킬 수 있을지 이 포스팅에 주기적으로 정리를 하고, 이를 이용해 나름대로 체계를 갖추고 학습을 해 보고자 합니다. 부디 효과가 있었으면 좋겠습니다.

Contents

  • Fundamentals   - Data Structure   - Math & Logic   - Computer Architecture
  • After Fundamentals   - Big-O Notarion   - Implementing Some Algorithms   - Algorithm Books   - Practice coding   - Algorithms Explanations & Interview Questions   - Dynamic Programming

Fundamendtals

어떠한 분야든 잘 하기 위해서는 단단한 기초가 필요합니다. 전반적인 기초 지식은 학교, 부트캠프, 온라인 강의, 책 등을 통해 학습할 수 있습니다. 저는 비전공자이며 자바스크립트 부트캠프 과정을 이수했습니다. 컴퓨터 공학 지식을 더 쌓고 싶어 웹 개발자로 일을 병행하며 이수할 수 있는 컴퓨터 공학 온라인 학사 과정이 있는지 찾아보고자 합니다.

TODO PROGRESS
자바스크립트 부트캠프 완료 (2018.11 - 2019.03)
컴퓨터 공학 온라인 과정 검색 In progress

#### Data Structure Array, Linked List, Binary tree, Binary Search Tree, Hash Table, Graph, Stack, Queue 등 기본적인 자료구조 학습이 필요합니다.
TODO PROGRESS
자료구조 기본 개념 학습 및 만들어보기 19.04. 3주차 복습

#### Math & Logic 알고리즘, 논리적 사고를 향상시키고 장기적으로 좋은 개발자가 되기 위해서 수학적 개념도 익혀야 합니다. 이산수학, 행렬, 비트연산, 선형대수학, 순열 등 학습하면 도움이 될 것 같습니다.
#### Computer Architecture 컴퓨터가 데이터를 어떻게 처리하는지, 컴퓨터 연산, 부동 소수점 표시 등 Computer Architecture에 대해 공부가 필요합니다. C와 같은 언어, 또는 assebly program에 대해 학습을 하면 도움이 된다고 합니다.

After Fundamentals

어느정도 기본적인 개념을 익혔다면, 알고리즘을 좀 더 세세하게 접해볼 시간입니다.

Big-O & Runtime

- Big-O notaion을 학습하고 자신이 짠 알고리즘이 어떠한 시간 복잡도를 가지는지 학습합니다. - 알고리즘 관련 알고리즘 강의 참고 자료

Impletemting some algorithms

아래와 같은 기본적인 알고리즘을 구현해 보고, 시간복잡도 및 공간복잡도에 대해서 생각해 봅니다. 아래 완료한 알고리즘 또한 복습이 필요합니다.

TODO PROGRESS
Stack 19.04. 3주차 복습
Queue 19.04. 3주차 복습
Tree 19.04. 3주차 복습
Binary Search Tree 19.04. 3주차 복습
Binary Search Tree Traversal 19.04. 3주차 복습
Breadth and Depth First 19.04. 3주차 복습
Hash Table 복습 예정
Graph --
Euclid’s algorithm --
Dijkstra’s shortest path --
Bubble, Insertion, Selection, Quick, Merge Sort 19.04. 3주차 복습
etc --

#### Algorithm Books 알고리즘 책 선정해서 학습할 것입니다.
TODO PROGRESS
책 선정하기 --

#### Practicing coding 알고리즘을 풀 수 있는 사이트에서 실제로 여러 알고리즘 풀어봐야 합니다. 현재는 codewars에서 주로 풀고 있지만, 아래의 다른 사이트도 이용할 예정입니다. \- [Codewars](https://www.codewars.com/dashboard) \- [HackerRank](https://www.hackerrank.com/onboarding/challenge) \- [Coderbyte](https://www.coderbyte.com/)
#### Algorithms Explanations & Interview Questions 알고리즘 해설 및 코드 읽어보기 \- [GeeksforGeeks](https://www.geeksforgeeks.org/) \- [일반적인 알고리즘 문제 리스트](https://techiedelight.quora.com/500-Data-Structures-and-Algorithms-interview-questions-and-their-solutions?srid=dV6r)
#### Dynamic Programming Dynamic Programming은 알고리즘을 잘 하기 위해 중요한 개념 중 하나이며, 실제 면접에서도 Dynamic Programming에 대해 질문을 받았습니다. 저는 Dynamic Programming에 대해서 별도의 포스팅을 작성하며 학습하고자 합니다. \- [Dynamic Programming 문제 리스트](https://www.geeksforgeeks.org/dynamic-programming/)