알고리즘 1도 공부안해본 개발자 1달만에 코딩테스트 통과하기
February 09, 2020
(알고리즘 공부의 결과가 어땠는지 궁금해 하시는 분들을 위해 미리 말씀드리자면, 나는 아래의 방법으로 알고리즘 공부의 기초를 다졌고, 그 결과 소프트웨어 마에스트로 코딩테스트(1차), 라인 코딩테스트에 합격했다. 내 실력은 아직도 많이 부족하지만, 내가 알고리즘의 기초를 다진 방법들은 분명 효과가 있었다.)
나는 1만가지 발차기를 한번씩 한 사람을 두려워 하지 않는다. 하지만 한가지 발차기를 1만번 한 사람을 두려워 한다.
이소룡이 한 명언중 가장 좋아하는 말이다. 여러가지를 그저 알고 있는 것과 그것을 실제로 실행해 보며 익힌 사람의 차이는 크다는 의미다.
발차기와 마찬가지로 수만가지 학습법을 알고 있어도 그걸로 실제로 할 수 있지 않다면, 지식을 자랑하는 것 말고는 아무 쓸모가 없다. 나는 학습에 관심이 많은터라 다양한 학습 방법은 알고 있지만, 정작 그 학습법을 진지하게 실천한 적은 별로 없다. 만가지 발차기를 한번씩 하는 사람이 되어버린 기분이다.
이런 나에게 때마침 절실하게 학습을 할 필요가 생겼다. 현재 나는 알고리즘을 하나도 모르는 상태 이지만 한달 뒤에 있는 코딩 테스트에서 좋은 성적이 필요한 상황에 처한 것이다.
이번에 응시할 코딩 테스트는 소프트웨어 마에스트로 11기 과정에 들어가기 위한 테스트다. 인터넷에서 후기를 찾아보니, 사람을 겸손하게 하는 난이도 라고 한다. 단순히 열심히 하기 보다는 그동안 마음속에 모셔두기만 했던 학습방법들을 꺼내어 써야 할 때라는 생각이 들었다.
적용하고자 하는 학습 방법론은 총 3가지다.
1. 그릿에서 읽었던 잘게 쪼개어 반복하기
어려운일은 한없이 어려워 보이지만 사실은 잘개 쪼개어서 약한 부분을 반복 하면 극복할 수 있다. 아무리 어렵고 복잡한 알고리즘 이라도 작은 부분으로 나누고 약한 부분을 반복해서 익히면 된다.
하지만, 지금 나의 상태는 모든게 약점인 상황이다. 이전에 알고리즘 공부를 한 적이 없으니 당연하다. 일단, 프로그래머스 고득점 kit를 차근차근 풀어 나가면서 내가 어떤 부분에서 약한지를 우선적으로 파악한다.
2월 달 까지는 여기 문제를 풀기 위해 필요한 개념들을 습득하고 모범 답안을 흡수 하는 것을 목표로 한다. 그러면서 나의 잘못된 사고습관들을 명확히 기록 하고 그 부분을 고칠 수 있는 문제를 반복해서 푼다. 3월 이후로는 그동안 기록한 약점들을 위주로 계속 반복을 한다.
2. 완벽한 공부법에서 익힌 백지 복습법
어렵게 학습 할수록 많이 남는다. 어렵게 복습하는 것의 최고봉은 백지 복습법이다. 그날 배운걸 새하얀 종이 위에 아무것도 없는 상태에서 적어 나가는 공부 법이다. 완벽한 공부법 이라는 책을 읽으면서 이 공부법을 접하게 되었다. 읽자마자 몇번 시도를 해 봤었는데, 정말 어렵지만 머릿속에 남는 것 만큼은 정말 확실했었던 기억이 난다. 매일 저녁 그날 배운 것들을 아무것도 없는 백지에 적는걸 하루의 루틴으로 삼는다.
3. 애빙하우스의 망각곡선
인간은 망각한다. 망각은 반복된 학습으로 극복 가능하다. 교육심리학자 애빙하우스에 의하면, 학습 후 10분, 1일, 1주, 30일의 간격으로 복습을 하면 기억이 장기 기억으로 이전 된다고 한다. 시험이30일 뒤니 30일 복습은 못한다 치더라도 10분, 1일 1주 간격의 복습을 철저히 지킨다. 10분 뒤 복습은 머릿속으로 떠올리는 식으로 하고 1일, 1주 간격의 복습은 백지 복습법에서 적어 놓은 것들을 참고한다.
그리고 제일 중요한게 있다.
할 수 있다고 믿는 것이다. 살다보면 안 될 거같은 일도 자신감을 가지고 해서 되는 경우도, 쉬운 일도 부정적인 마음 가짐 때문에 되지 않는 경우도 종종 겪게 된다. 그러니 되든 안되는 무조건 할 수 있다고 믿는 것이 유리하다. 된다고 믿고 있다가 실패하면 어떤가, 실패한대로 나름의 교훈을 얻고 다시 도전하면 되는 것이다.