
벨로그를 만들기 전부터 알고리즘 스터디를 주마다 진행해왔다. 특별한 일정이 없는 기간이었다 보니 기간에 비해서 꽤 많은 문제를 풀었고, 꽤 많은 알고리즘을 배웠다.
3인조로 구성된 우리 스터디그룹은 백준 온라인저지 홈페이지를 이용하여 알고리즘 공부를 하기로 계획하였는데, 셋의 목적은 코딩테스트 준비 또는 코딩에 익숙해지기 등 다양했지만 수단으로 이를 선택한 것은 꽤 좋은 선택이었던 것 같다.
특정한 프로그래밍 언어를 지정하여서 스터디멤버를 모은 것이 아닌 뜻이 맞는 친구들끼리 만든 스터디그룹이었기 때문에 스터디멤버가 다루는 프로그래밍 언어가 각각 달랐다. 알고리즘 문제에 대해서는 셋 모두가 문외한이었기에, 어떤 언어가 각자의 목적에 대한 적합성과 알고리즘 문제 풀이의 효율성를 모두 최대한으로 얻어내도록 할지 제대로 파악하지 못했다.
그러다보니 프로그래밍 언어를 통일하는 과정이 있었고, 1주차 ~ 3주차는 javascript, 4주차 ~ 5주차는 C++, 5주차 ~ 현재까지는 python을 사용하였다.(현재는 8주차이다.)
문제를 풀 때 사용하는 프로그래밍 언어를 계속 바꿔가다 보니 각 언어의 메모리 할당 구조, 객체의 성질, 자료형, 표준입/출력, 기본적인 문법구조 등을 숙지하게 되었고, 의도하지는 않았지만 프로그래밍 언어에 대한 좋은 공부가 되었다고 생각한다.
개인 블로그를 쓰며 공부하면서 알아가는 내용을 기록해 이것을 나름대로의 딕셔너리로 활용하는 것도 계속 생각하였다. 하지만 생각보다 알고리즘 공부 과정이 수월하게 진행되었고, 무엇보다 새롭게 해결하려는 문제 중 기존의 지식만으로 해결할 수 있는 문제들을 보고 기존의 지식들을 끄집어내는 것에 무리를 느끼지 않았기 때문에 블로그의 필요에 의문을 갖고 있었다.
하지만 알고리즘 공부가 8주차에 접어들어 슬슬 중급 레벨의 문제들을 건드리기 시작하였고, 이는 구현 복잡도의 상승과 알고리즘 개념 자체의 심화도 상승을 불러와 내 플래시 메모리의 용량 초과를 일으키기 시작했다. 이를 느낀 것은 분할 정복 알고리즘의 구현과 세그먼트 트리의 구현 과정이었다.
따라서 나는 블로그에 알고리즘 공부과정에서 풀게되는 문제들을 기록하려고 한다. 내가 모르던 새로운 개념을 필요로 하는 문제를 개념숙지와 함께 풀이한 이후에 비슷한 문제를 만났을 때 해당 개념을 떠올리지 못할 것을 대비하여, 주관적으로 일정한 수준의 직관력을 요하는 문제풀이에 대해서는 구체적인 구현방법까지 기록할 생각이다.
후에 이 블로그의 포스트가 쌓여 나의 자취를 나타낼 것을 생각해보면, 프로젝트에 대한 기록이나 개발과 관련된 여러 공부 내용들. 심지어는 내 주전공인 법학에 대한 공부 내용도 이 블로그에 기록될 수 있을 것이다.